首页 > 其他 > 详细

PL学习-label

时间:2020-05-15 21:33:43      阅读:55      评论:0      收藏:0      [点我收藏+]

<<label_name>>

 

  1. label_name遵循标识符原则
  2. 没有分割符;

 

 

label的三个地方

  1. 匿名块block的label(标识变量)
  2. goto语句的label,标识goto的位置
  3. loop的label,用于exit和continue语句

 

匿名块的label

<<outer>>  -- label
DECLARE
  birthdate DATE := ‘09-AUG-70‘;
BEGIN
  DECLARE
    birthdate DATE := ‘29-SEP-70‘;
  BEGIN
    IF birthdate = outer.birthdate THEN
      DBMS_OUTPUT.PUT_LINE (‘Same Birthday‘);
    ELSE
      DBMS_OUTPUT.PUT_LINE (‘Different Birthday‘);
    END IF;
  END;
END outer;
/

Result:

Different Birthday

 

说明

<<lable_name>>   ----- 开始

declare

.....    -------可以使用label标识变量

begin

....

end lable_name;

 

 

goto语句

goto label_name

 

某处

<<label_name>>

 

DECLARE
  done  BOOLEAN;
BEGIN
  FOR i IN 1..50 LOOP
    IF done THEN
      GOTO end_loop;
    END IF;
    <<end_loop>>
    NULL;
  END LOOP;
END;
/

 

<<label_name>>的位置有些限制:

  1. 不能去if语句
  2. 不能end之前(至少有一个可执行语句),如果需要在<<label_name>>end之间加上一个null
  3. 在同一范围

 

标识loop语句

exit和continue语句都支持label

DECLARE
  s  PLS_INTEGER := 0;
  i  PLS_INTEGER := 0;
  j  PLS_INTEGER;
BEGIN
  <<outer_loop>>
  LOOP
    i := i + 1;
    j := 0;
    <<inner_loop>>
    LOOP
      j := j + 1;
      s := s + i * j; -- Sum several products
      EXIT inner_loop WHEN (j > 5);
      EXIT outer_loop WHEN ((i * j) > 15);
    END LOOP inner_loop;
  END LOOP outer_loop;
  DBMS_OUTPUT.PUT_LINE
    (‘The sum of products equals: ‘ || TO_CHAR(s));
END;
/

 

 
 

PL学习-label

原文:https://www.cnblogs.com/fqguo24/p/12896564.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!