• Oracle控制结构详解


    ------------------------------------
    if 条件表达式 then ..
    ------------------------------------
    --  编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给雇员工资增加10%
    create or replace procedure sp_pro(spName varchar2) is
      --定义
      v_sal emp.sal%type;
    begin
      --执行
      select sal into v_sal from emp where ename=spName;
      --判断
      if v_sal<2000 then
        update emp set sal=sal*1.1 where ename=spName;
      end if;
    end;

    --调用过程
    exec sp_pro('SCOTT');


    ------------------------------------
    if 条件表达式 then .. else ..
    --------------------------------------------
    --  编写一个过程,可以输入一个雇员名,如果该雇员的补助不是0,就在原基础上增加100,如果补助为0,就把补助设为200
    create or replace procedure sp_pro(spName varchar2) is
      --定义
      v_comm emp.comm%type;
    begin
      --执行
      select comm into v_comm from emp where ename=spName;
      --判断
      if v_comm<>0 then
         update emp set comm=comm+100 where ename=spName;
      else
         update emp set comm=comm+200 where ename=spName;
      end if;
    end;

    --调用过程
    exec sp_pro('SCOTT');

    ----------------------------------------------------
    if 条件表达式 then .. elsif 条件表达式 then .. else ..
    ----------------------------------------------------
    -- 编写一个过程,可以输入一个雇员编号,
    --如果该雇员的职位是PRESIDENT就给他的工资增加1000,
    --如果该雇员的职位是MANAGER就给他的工资增加500,
    --其他职位的雇员工资增加200
    create or replace procedure sp_pro(spNo number) is
      --定义
      v_job emp.job%type;
    begin
      --执行
      select job into v_job from emp where empno=spNo;
      --判断
      if v_job='PREDIENT' then
         update emp set sal=sal+1000 where empno=spNo;
      elsif v_job='MANAGER' then
         update emp set sal=sal+500 where empno=spNo;
      else
         update emp set sal=sal+200 where empno=spNO;
      end if;
    end;

    --调用过程
    exec sp_pro(7839);

    ------------------------------
    while
    ------------------------------
    --语法
    while 条件表达式 loop
      执行语句...;
    end loop;

    --案例
    --循环向表插入数据
    create or replace table test_1(
    empno number primary key,
    ename varchar2(20) default '' not null
    );

    create or replace procedure pro(v_in_ename varchar2, v_in_n number) is
      --定义变量
      v_empno number:=200;
    begin
      delete test_1;
      while v_empno<=200+v_in_n loop --while循环
        insert into test_1 values(v_empno, v_in_ename);
        v_empno:=v_empno+1;
      end loop;
    end;


    ------------------------------
    for
    ------------------------------
    --语法
    for i in reverse 1..10 loop
       执行语句;
    end loop;
     
     
    --案例
    create or replace procedure pro(v_in_ename varchar2, v_in_n number) is
      --定义变量
      v_empno number:=200;
    begin
      delete test_1;
      for i in reverse 1..10 loop --for循环
        insert into test_1 values(v_empno, v_in_ename);
        v_empno:=v_empno+1;
      end loop;
    end;

    ------------------------------
    goto,null
    ------------------------------
    1、goto跳转到特定标号去执行

    --案例
    declare
      i number:=1;
    begin
      <<start_loop>>
      loop
        dbms_output.put_line('输出i='||i);
        if i=12 then
          goto end_loop;
        end if;
        i:=i+1;
        if i=10 then
          goto start_loop;
        end if;
      end loop;
      <<end_loop>>
      dbms_output.put_line('循环结束');
    end;

    2、null 语句不会执行任何操作

    --案例
    declare
     v_sal emp.sal%type;
     v_ename emp.ename%type;
    begin
     select ename,sal into v_ename,v_sal from emp where empno=&no;
     if v_sal<3000 then
       update emp set comm=sal*0.1 where ename=v_ename;
     else
       null; --null 其实没有任何意义
     end if;
    end;

  • 相关阅读:
    解决response在controller返回乱码的解决方式
    Injection of autowired dependencies failed;错误解决
    sql mybatis 使用concat乱码
    【算法基础】欧几里得gcd求最大公约数
    sql视图和表的区别
    在idea下创建maven
    Arrays.sort()自定义排序
    数组
    java 遍历数组
    抽象与接口
  • 原文地址:https://www.cnblogs.com/qintangtao/p/2749589.html
Copyright © 2020-2023  润新知