• plsql语句基础


    -- plsql语言
    三大块
    declare -- 声明变量
    begin -- 执行语块
    exception -- 异常处理
    end;
    -- 属性,变量,变量类型引用
    declare
    v_empno number; -- 自定义变量属性,要与原属性一致,或同类型
    v_job emp.job%type; -- 引用数据库某列类型
    begin
    select empno into v_empno from emp where empno=7788;

    select job into v_job from emp where empno=7788;

    dbms_output.put_line(v_empno||v_job);
    end;


    declare
    v_emp emp%rowtype; -- 行变量,引用整行类型
    begin
    select * into v_emp from emp where empno=7788;

    dbms_output.put_line(v_emp.empno||v_emp.job);
    end;

    -- if语句,{}改成then,else if改成elsif ,else后面{}then都不写,要用end if结尾,空语句要写null
    declare
    v_emp emp%rowtype;
    begin
    select * into v_emp from emp where empno=7788;
    if(v_emp.sal between 2000 and 3000) then
    dbms_output.put_line(666);
    else
    dbms_output.put_line(777);
    end if;
    end;

    -- 三种循环loop,whileloop,forloop及跳转语句goto
    declare
    coun number:=0;
    coun2 number:=10;
    begin
    loop
    coun:=coun+1;
    goto flag; -- 跳转语句
    exit when coun=11;
    dbms_output.put_line(coun);
    end loop;
    <<flag>>
    loop -- 设定跳转标签
    coun2:=coun2+1;
    exit when coun2=21;
    dbms_output.put_line(coun2);
    end loop;
    end;

    -- 异常处理
    1预定义错误处理

    2非预定义错误

    3自定义错误

    -- 命令行操作
    -- 备份导出
    exp 用户名1/密码1@ORCL file="备份地址1"
    -- 恢复导入
    imp 用户名2/密码2@ORCL fromuser="用户名1" touser="用户名2" file="备份地址1"
    -- 也可用图形化界面操作

    -- 隐式游标sql,自动声明、开启、关闭
    declare
    begin
    update emp set comm=1000 where empno=7788;
    if(sql%found) then -- %found sql语句影响了一行或者多行,true,也就是sql语句能找到;对应也有%notfound
    dbms_output.put_line(sql%rowcount); -- %rowcount sql语句影响行数
    else
    dbms_output.put_line(777);
    end if;
    /*if(sql%isopen) then -- %isopen 游标是否打开,隐式游标一直是false
    dbms_output.put_line(666);
    else
    dbms_output.put_line(777);
    end if;*/
    end;

    declare
    begin
    /* update emp set comm=1000 where empno=8888;
    if(sql%found) then
    dbms_output.put_line(666);
    else
    dbms_output.put_line(777);
    end if;*/
    if(sql%isopen) then -- %isopen 游标是否打开,隐式游标一直是false
    dbms_output.put_line(666);
    else
    dbms_output.put_line(777);
    end if;
    end;


    -- 不带参数显式游标
    -- loop循环
    declare
    cursor cur_emp is select * from emp;-- 声明游标,说明游标是哪个结果集的
    v_emp emp%rowtype;
    begin
    open cur_emp;
    loop
    fetch cur_emp into v_emp;
    exit when cur_emp%notfound;
    dbms_output.put_line(v_emp.empno||v_emp.ename);
    end loop;
    close cur_emp;
    end;

    -- whileloop循环
    declare
    cursor cur_emp is select * from emp;
    v_emp emp%rowtype;
    begin
    open cur_emp;
    fetch cur_emp into v_emp;
    while cur_emp%found loop
    dbms_output.put_line(v_emp.empno||v_emp.ename);
    fetch cur_emp into v_emp;
    end loop;
    close cur_emp;
    end;

    -- forloop循环 注意:游标自动开启自动关闭
    declare
    cursor cur_emp is select * from emp;

    begin
    for v_emp in cur_emp loop
    dbms_output.put_line(v_emp.empno||v_emp.ename);
    end loop;

    end;


    -- 带参数显式游标
    select * from emp where empno=7788;

    declare
    cursor cur_emp(v_empno emp.empno%type)
    is select * from emp where empno=v_empno;
    v_emp emp%rowtype;
    begin
    open cur_emp(7788);
    fetch cur_emp into v_emp;
    dbms_output.put_line(v_emp.empno||'姓名'||v_emp.ename);
    close cur_emp;
    end;

  • 相关阅读:
    讲课专用——线段树——最长上升子序列
    讲课专用——线段树——最长连续空位
    讲课专用——线段树——BSS
    求背景图
    致备战noip2018的勇士
    TNS-12547 Linux Error: 104: Connection reset by pe (转载)
    清理Oracle安装目录里的一些日志信息
    tmp_table_size
    11gr2 alert日志中报TNS-12535 TNS-00505原因及解决方法 (转载)
    systemstate dump 介绍
  • 原文地址:https://www.cnblogs.com/21556guo/p/13561815.html
Copyright © 2020-2023  润新知