oracle goto语句介绍

来源:互联网 发布:会员数据分析方法 编辑:程序博客网 时间:2024/06/08 18:29

http://blog.csdn.net/indexman/article/details/19050419

以下内容来自oracle plsql user guide.

-------------------------------------------------------

一 定义:

     The Oracle PL/SQL GOTO statement is a sequential control structure available in Oracle. The GOTO statement immediately transfers program control (called "branching") unconditionally to a named statement label or block label. The statement or label name must be unique in the block. 

   属于plsql控制语句,用于程序控制非条件跳至指定标签<<???>>。不易控制和维护,慎用!


二 例子:

   1、简单GOTO 语句,判断数字是否为质数:

   

[sql] view plain copy 在CODE上查看代码片派生到我的代码片
  1. DECLARE  
  2.   p VARCHAR2(30);  
  3.   n PLS_INTEGER := 37; -- test any integer > 2 for prime  
  4. BEGIN  
  5.   FOR j IN 2 .. round(sqrt(n)) LOOP  
  6.     IF n MOD j = 0 THEN  
  7.       -- test for prime  
  8.       p := ' is not a prime number'-- not a prime number  
  9.       GOTO print_now;  
  10.     END IF;  
  11.   END LOOP;  
  12.   p := ' is a prime number';  
  13.   <<print_now>>  
  14.   dbms_output.put_line(to_char(n) || p);  
  15. END;  
  16. /  

  2、使用null避免报错:

[sql] view plain copy 在CODE上查看代码片派生到我的代码片
  1. DECLARE  
  2.   done BOOLEAN;  
  3. BEGIN  
  4.   FOR i IN 1 .. 50 LOOP  
  5.     IF done THEN  
  6.       GOTO end_loop;  
  7.     END IF;  
  8.     <<end_loop>> -- not allowed unless an executable statement follows  
  9.     NULL-- add NULL statement to avoid error  
  10.   END LOOP; -- raises an error without the previous NULL  
  11. END;  
  12. /  

  3、使用goto分出一个环绕块:

[sql] view plain copy 在CODE上查看代码片派生到我的代码片
  1. -- example with GOTO statement  
  2. DECLARE  
  3.   v_last_name VARCHAR2(25);  
  4.   v_emp_id    NUMBER(6) := 120;  
  5. BEGIN  
  6.   <<get_name>>  
  7.   SELECT last_name  
  8.   INTO v_last_name  
  9.   FROM employees  
  10.   WHERE employee_id = v_emp_id;  
  11.   BEGIN  
  12.     dbms_output.put_line(v_last_name);  
  13.     v_emp_id := v_emp_id + 5;  
  14.     IF v_emp_id < 120 THEN  
  15.       GOTO get_name; -- branch to enclosing block  
  16.     END IF;  
  17.   END;  
  18. END;  

0 0
原创粉丝点击