顺序语句:GOTO和NULL语句

Posted 空空Ryan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺序语句:GOTO和NULL语句相关的知识,希望对你有一定的参考价值。

一 标号和GOTO

1 语法:

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

GOTO label;
......
<<label>> /*标号是用<< >>括起来的标识符 */

注意,在以下地方使用是不合法的,编译时会出错误。

— 跳转到非执行语句前面。

— 跳转到子块中。

— 跳转到循环语句中。

— 跳转到条件语句中。

— 从异常处理部分跳转到执行。

— 从条件语句的一部分跳转到另一部分。

 

2 例子:

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 labelOffLOOP;
   END IF;
   END LOOP;
   <<labelOffLOOP>>
     DBMS_OUTPUT.PUT_LINE(‘V_counter的当前值为:‘||V_counter);
END;

 

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;

 

2 NULL语句

在PL/SQL 程序中,NULL语句是一个可执行语句,可以用 null 语句来说明“不用做任何事情”的意思,相当于一个占位符或不执行任何操作的空语句,可以使某些语句变得有意义,提高程序的可读性,保证其他语句结构的完整性和正确性。如:

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

 

DECLARE
   v_emp_id employees.employee_id%TYPE;
   v_first_name employees.first_name%TYPE;
   v_salary employees.salary%TYPE;
   v_sal_raise NUMBER(3,2);
BEGIN
   v_emp_id := &emp_id;
   SELECT first_name, salary INTO v_first_name, v_salary
   FROM employees WHERE employee_id = v_emp_id;
   IF v_salary <= 3000 THEN
      v_sal_raise := .10;
      DBMS_OUTPUT.PUT_LINE(v_first_name||‘的工资是‘||v_salary
                                       ||‘、工资涨幅是‘||v_sal_raise);
   ELSE
      NULL;
   END IF;
END;

以上是关于顺序语句:GOTO和NULL语句的主要内容,如果未能解决你的问题,请参考以下文章

oracle pl/sql 控制结构(分支,循环,控制)

goto语句在工作当中的用法

oracle数据库之PL/SQL 流程控制语句

语句goto不能跨变量定义?

c的循环语句

C语言 goto,break和continue跳转语句详解!