PL/SQL流程控制语句

PL/SQL流程控制语句

介绍PL/SQL的流程控制语句, 包括如下三类:
    控制语句: IF 语句
    循环语句: LOOP语句, EXIT语句
    顺序语句: GOTO语句, NULL语句
①if语句
IF <布尔表达式> THEN
    PL/SQL 和SQL语句;
ELSIF< 其它布尔表达式> THEN
    其它语句;
ELSIF< 其它布尔表达式> THEN
    其它语句;
ELSE
    其它语句;
END IF;

例:
declare
    v_emp_name employees.last_name%type;
    v_emp_sal employees.salary%type;
    v_emp_sal_level varchar2(20);
begin
    select last_name,salary into v_emp_name,v_emp_sal from employees where employee_id = 150;
   
    if(v_emp_sal >= 10000) then v_emp_sal_level := 'salary >= 10000';
    elsif(v_emp_sal >= 5000) then v_emp_sal_level := '5000<= salary < 10000';
    else v_emp_sal_level := 'salary < 5000';
    end if;
   
    dbms_output.put_line(v_emp_name||','||v_emp_sal||','||v_emp_sal_level);
end;

② CASE 表达式
    CASE selector
        WHEN expression1 THEN result1
        WHEN expression2 THEN result2
        WHEN expressionN THEN resultN
        [ ELSE resultN+1]
    END;

例:
declare
      v_sal employees.salary%type;
      v_msg varchar2(50);
begin   
      select salary into v_sal
      from employees
      where employee_id = 150;
     
      --case 不能向下面这样用
      /*
      case v_sal when salary >= 10000 then v_msg := '>=10000'
                  when salary >= 5000 then v_msg := '5000<= salary < 10000'
                  else v_msg := 'salary < 5000'
      end;
      */
 
      v_msg :=
            case trunc(v_sal / 5000)
                  when 0 then 'salary < 5000'
                  when 1 then '5000<= salary < 10000'
                  else 'salary >= 10000'
            end;
     
      dbms_output.put_line(v_sal ||','||v_msg);
end;

③循环
1.  简单循环
    LOOP
        要执行的语句;
        EXIT WHEN<条件语句> ; /*条件满足,退出循环语句*/
    END LOOP;

2.  WHILE 循环(相较1,推荐使用2)
    WHILE<布尔表达式> LOOP
        要执行的语句;
    END LOOP;
3.数字式循环
    FOR循环计数器IN[REVERSE ] 下限.. 上限LOOP
        要执行的语句;
    END LOOP;
每循环一次,循环变量自动加1;使用关键字REVERSE,循环变量自动减1。
跟在IN REVERSE 后面的数字必须是从小到大的顺序,而且必须是整数,不能是变量或表达式。可以使用EXIT退出循环。

例:使用循环语句打印 1 - 100.(三种方式)

1).  LOOP ... EXIT WHEN ... END LOOP
declare
      --初始化条件
      v_i number(3) := 1;
begin
      loop
      --循环体
        dbms_output.put_line(v_i);
 --循环条件
        exit when v_i = 100;
 --迭代条件
        v_i := v_i + 1;
      end loop;
end;

2). WHILE ... LOOP ... END LOOP
declare
      --初始化条件
      v_i number(3) := 1;
begin
      --循环条件
      while v_i <= 100 loop
      --循环体
            dbms_output.put_line(v_i);
      --迭代条件
            v_i := v_i + 1;
      end loop;
end;

3).
begin
      for i in 1 .. 100 loop
            dbms_output.put_line(i);
      end loop;
end;

例: 综合使用 if, while 语句, 打印 1 - 100 之间的所有素数
(素数: 有且仅用两个正约数的整数, 2, 3, 5, 7, 11, 13, ...).

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/c8b63a3f954822339bb928c6831b433e.html