PL/SQL流程控制语句

PL/SQL的流程控制语句,包括如下三类:

  • 控制语句: IF语句
  • 循环语句: LOOP语句,EXIT语句
  • 顺序语句: GOTO语句,NULL语句

条件语句

语法规则:

IF<布尔表达式>THEN
   PL/SQLSQL语句;
END IF;
IF<布尔表达式>THEN
   PL/SQLSQL语句;
ELSE
   其他语句;
END IF;
IF<布尔表达式>THEN
   PL/SQLSQL语句;
ELSIF<其他布尔表达式>THEN
   其他语句;
ELSIF<其他布尔表达式>THEN
   其他语句;
ELSE
   其他语句;
END IF;

注意: ELSIF不能写成ELSEIF

案例

DECLARE
    v_empno emp.empno%TYPE;
    v_salary emp.sal%TYPE;
    v_comment VARCHAR2(35);
BEGIN
    SELECT sal INTO v_salary FROM emp WHERE empno=v_empno;
    IF v_salary<1500 THEN
       v_comment:='Fairly less';
    ELSIF v_salary<3000 THEN
       v_comment:='A little more';
    ELSE
       v_comment:='Lots of salary';
    END IF;
    DBMS_OUTPUT.PUT_LINE(v_comment);
END;

CASE表达式

CASE selector
    WHEN expression1 THEN result1
    WHEN expression2 THEN result2
END;

案例

DECLARE
    v_grade char(1);
    v_appraisal varchar2(20);
BEGIN
    v_apprasial:=
    CASE v_grade
         WHEN 'A' THEN 'EXcellent'
         WHEN 'B' THEN 'Very Good'
         WHEN 'C' THEN 'Good'
         ELSE 'No such grade'
    END;
    DBMS_OUTPUT.PUT_LINE('Grade:'||v_grade||'Appraisal:'||v_appraisal);
END;

循环

1、简单循环

  LOOP
    要执行的语句;
  EXIT WHEN<条件语句>;
  END LOOP;
DECLARE
    int NUMBER:=0;
BEGIN
   LOOP
      int:=int+1;
      DBMS_OUTPUT.PUT_LINE('int的当前值为:'||int);
      EXIT WHEN int=10;
   END LOOP;
END;

2、while循环

WHILE<布尔表达式>LOOP
   要执行的语句;
END LOOP;
DECLARE
    x NUMBER:=1;
BEGIN
   WHILE x<=10 LOOP
     DBMS_OUTPUT.PUT_LINE('x的当前值'||x);
     x:=x+1;
   END LOOP;
END;

3、数字式循环

FOR 循环计数器 IN[REVERSE] 下限...上限  LOOP
   要执行的语句;
END LOOP;

每循环一次,循环变量自动加1;使用关键字REVERSE,循环变量自动减1。跟在IN REVERSE后面的数字必须是从小到大的顺序,而且必须是整数,不能是变量或者表达式。可以使用EXIT退出循环。

BEGIN
   FOR int in 1..10 LOOP
       DBMS_OUTPUT.PUT_LINE('int的当前值为:'||int);
   END LOOP;
END;
CREATE TABLE temp_table(num_col NUMBER);

DECLARE
   v_counter NUMBER:=10;
BEGIN
   INSERT INTO temp_table(num_col) VALUES(v_counter);
   FOR v_counter IN 20..25 LOOP
      INSERT INTO temp_table(num_col) VALUES(v_counter);
   END LOOP;
   INSERT INTO temp_table(num_col) VALUES(v_counter);
   FOR v_counter IN 20..25 LOOP
      INSERT INTO temp_table(num_col) VALUES(v_counter);
   END LOOP;
END;

DROP TABLE temp_table;

标号和GOTO

PL/SQL中GOTO语句是无条件跳转到指定的标号去。语法如下
GOTO label;

DECLARE
    v_counter NUMBER:=1;
BEGIN
   LOOP
     DBMS_OUTPUT.PUT_LINE('v_counter的当前值为:'||v_counter);
     v_counter:=v_counter+1;
     IF v_counter>10 THEN
       GOTO l_ENDofLOOP;
     END IF;
   END LOOP;
   <<l_ENDofLOOP>>
   DBMS_OUTPUT.PUT_LINE('v_counter的当前值为:'||v_counter);

END;

NULL语句

在PL/SQL程序中,可以用null语句来说明“不用做任何事情”的意思,相当于一个占位符,可以使某些语句变得有意义,提高程序的可读性。如:

DECLARE
    ...
BEGIN
    ...
    IF v_num IS NULL THEN
       GOTO print1;
    END IF;
    ....
    <<print1>>
    NULL; --不需要处理任何数据
END;

你可能感兴趣的:(数据库,sql)