标号和GOTO
PL/SQL中GOTO语句是无条件跳转到指定的标号去的意思。语法如下:
GOTO label;
......
<<label>> /*标号是用<< >>括起来的标识符 */
......
<<label>> /*标号是用<< >>括起来的标识符 */
注意,在以下地方使用是不合法的,编译时会出错误。
u 跳转到非执行语句前面。
u 跳转到子块中。
u 跳转到循环语句中。
u 跳转到条件语句中。
u 从异常处理部分跳转到执行。
u 从条件语句的一部分跳转到另一部分。
例12:
1 DECLARE 2 V_counter NUMBER := 1; 3 BEGIN 4 LOOP 5 DBMS_OUTPUT.PUT_LINE('V_counter的当前值为:'||V_counter); 6 V_counter := v_counter + 1; 7 IF v_counter > 10 THEN 8 GOTO labelOffLOOP; 9 END IF; 10 END LOOP; 11 <<labelOffLOOP>> 12 DBMS_OUTPUT.PUT_LINE('V_counter的当前值为:'||V_counter); 13 END;
例13:
DECLARE v_i NUMBER := 0; v_s NUMBER := 0; BEGIN <<label_1>> v_i := v_i + 1; IF v_i <= 1000 THEN v_s := v_s + v_i; GOTO label_1; END IF; DBMS_OUTPUT.PUT_LINE(v_s); END;
NULL 语句
在PL/SQL 程序中,NULL语句是一个可执行语句,可以用 null 语句来说明“不用做任何事情”的意思,相当于一个占位符或不执行任何操作的空语句,可以使某些语句变得有意义,提高程序的可读性,保证其他语句结构的完整性和正确性。如:
例14:
1 DECLARE 2 ... 3 BEGIN 4 ... 5 IF v_num IS NULL THEN 6 GOTO labelPrint; 7 END IF; 8 … 9 <<labelPrint>> 10 NULL; --不需要处理任何数据。 11 END;
例15:
1 DECLARE 2 v_emp_id employees.employee_id%TYPE; 3 v_first_name employees.first_name%TYPE; 4 v_salary employees.salary%TYPE; 5 v_sal_raise NUMBER(3,2); 6 BEGIN 7 v_emp_id := &emp_id; 8 SELECT first_name, salary INTO v_first_name, v_salary 9 FROM employees WHERE employee_id = v_emp_id; 10 IF v_salary <= 3000 THEN 11 v_sal_raise := .10; 12 DBMS_OUTPUT.PUT_LINE(v_first_name||'的工资是'||v_salary 13 ||'、工资涨幅是'||v_sal_raise); 14 ELSE 15 NULL; 16 END IF; 17 END;