Fork me on GitHub

PL/SQL之流控制语句

1、选择控制语句

--语法1--
IF
条件 THEN 语句; END IF; DECLARE v_Salary NUMBER(8,2); BEGIN SELECT salary INTO v_Salary FROM auths WHERE name='张三'; IF v_Salary IS NOT NULL THEN DBMS_OUTPUT.PUT_LINE(v_Salary); END IF; END;
--语法2--
IF 条件 THEN 语句1; ELSE 语句2; END IF; DECLARE v_Salary NUMBER(8,2); BEGIN SELECT salary INTO v_Salary FROM auths WHERE name='张三'; IF v_Salary IS NOT NULL THEN DBMS_OUTPUT.PUT_LINE(v_Salary); ELSE DBMS_OUTPUT.PUT_LINE('工资未定'); END IF; END;
--语法3--
IF 条件1 THEN 语句1; ELSIF 条件2 THEN 语句2; [ELSE 语句3;] END IF; DECLARE v_Salary NUMBER(8,2); v_Comment VARCHAR2(40); BEGIN SELECT salary INTO v_Salary FROM auths WHERE name='张三'; IF v_Salary = 120 THEN v_Comment:='最低工资'; ELSIF(v_Salary > 120) AND (v_Salary <= 300) THEN v_Comment:='低工资'; ELSE v_Comment:='普通工资'; END IF; END;

2、循环控制语句

--语法1--
LOOP 语句;
END LOOP; DECLARE v_name VARCHAR2(10); v_num INTEGER:=1; BEGIN LOOP SELECT name INTO v_name FROM auths WHERE author_code='A0000'||TO_CHAR(v_num); v_num:=v_num+1; IF v_num>=10 THEN EXIT; END IF; END LOOP; END; ||为oracle中的字符串连接符; EXIT语句可在LOOP语句中出现多次,但不可以在LOOP语句外使用; DECLARE v_name VARCHAR2(10); v_num INTEGER:=1; BEGIN LOOP SELECT name INTO v_name FROM auths WHERE author_code='A0000'||TO_CHAR(v_num); v_num:=v_num+1; EXIT WHEN v_num>=10; END LOOP; END;
--语法2--
<<标号名>> LOOP 语句; END LOOP[标号名]; 标号指用"<<"和">>"括起来的标识符,必须放在LOOP语句的开始,结尾可选放。 在嵌套的LOOP循环中,带标号的循环可以提高程序的可读性。同时,使用EXIT语句不仅可以终止当前的循环,还可以终止任意带标号的循环语句。 DECLARE ... BEGIN <<first_loop>> LOOP LOOP ... EXIT first_loop WHEN ...; END LOOP; END LOOP first_loop; END;
--语法3--
WHILE 条件 LOOP 语句; END LOOP; DECLARE v_name VARCHAR2(10); v_num INTEGER:=1; BEGIN WHILE v_num<10 LOOP SELECT name INTO v_name FROM auths WHERE author_code='A0000'||TO_CHAR(v_num); v_num:=v_num+1; END LOOP; END;
--语法4--
FOR 循环变量 IN [REVERSE] 初始值..结束值 LOOP 语句; END LOOP; DECLARE v_name VARCHAR2(10); BEGIN FOR v_num IN 1..9 LOOP SELECT name INTO v_name FROM auths WHERE author_code='A0000'||TO_CHAR(v_num); DBMS_OUTPUT.PUT_LINE(v_name); END LOOP; END; DECLARE v_name VARCHAR2(10); v_count NUMBER; BEGIN SELECT COUNT(name) INTO v_count FROM auths FOR v_num IN 1..v_count LOOP SELECT name INTO v_name FROM auths WHERE author_code='A0000'||TO_CHAR(v_num); DBMS_OUTPUT.PUT_LINE(v_name); END LOOP; END; 可以引用循环变量; 循环变量的初始值和结束值可以是数据、变量或表达式,但值必须是整数; 允许在执行时动态的指定循环变量的初始值和结束值; 循环变量仅在循环语句中有效,当退出循环时,循环变量无效; 因为循环变量被隐式地定义为局部变量,所有任何同名的全局变量都将被改变量覆盖,如果要引用全局变量,则必须使用标号和点好; 如果在嵌套的循环语句中,内层和外层的循环变量名相同,这时,要在内部循环中使用外部循环的循环变量,必须使用标号和点好;

3、顺序控制语句

GOTO语句是非结构化语句;
NULL语句能够使条件语句的意义更加清晰,并且能够提高程序的可读性;

 

posted @ 2015-08-20 10:20  何海洋  阅读(872)  评论(0编辑  收藏  举报