标号和goto&null语句

标号和GOTO 

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

 

GOTO 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;

 

posted @ 2017-09-21 14:18  赵安之  阅读(455)  评论(0编辑  收藏  举报