设为首页 收藏本站
查看: 750|回复: 0

[经验分享] PL/SQL流程控制语句

[复制链接]

尚未签到

发表于 2018-10-19 12:56:05 | 显示全部楼层 |阅读模式
  介绍PL/SQL的流程控制语句, 包括如下三类:
l 控制语句: IF 语句
  l 循环语句: LOOP语句, EXIT语句
  l 顺序语句: GOTO语句, NULL语句
  1  条件语句
  IF  THEN
  PL/SQL 和 SQL语句
  END IF;
IF  THEN
  PL/SQL 和 SQL语句
  ELSE
  其它语句
  END IF;
  IF  THEN
  PL/SQL 和 SQL语句
  ELSIF < 其它布尔表达式> THEN
  其它语句
  ELSIF < 其它布尔表达式> THEN
  其它语句
  ELSE
  其它语句
  END IF;
  提示: ELSIF 不能写成 ELSEIF
  例1:
  SQL> conn hr/hr@pdbtest
  Connected.
  SQL> set serveroutput on
  SQL> DECLARE
  2      v_empno  employees.employee_id%TYPE :=&empno;
  3      V_salary employees.salary%TYPE;
  4      V_comment VARCHAR2(35);
  5  BEGIN
  6     SELECT salary INTO v_salary FROM employees
  7     WHERE employee_id = v_empno;
  8     IF v_salary < 1500 THEN
  9         V_comment:= '太少了,加点吧~!';
  10     ELSIF v_salary  DECLARE
  2    V_grade char(1) := UPPER('&p_grade');
  3    V_appraisal VARCHAR2(20);
  4  BEGIN
  5    V_appraisal :=
  6    CASE v_grade
  7      WHEN 'A' THEN 'Excellent'
  8      WHEN 'B' THEN 'Very Good'
  9      WHEN 'C' THEN 'Good'
  10      ELSE 'No such grade'
  11    END;
  12    DBMS_OUTPUT.PUT_LINE('Grade:'||v_grade||'  Appraisal: '|| v_appraisal);
  13  END;
  14  /
  Enter value for p_grade: D
  old   2:   V_grade char(1) := UPPER('&p_grade');
  new   2:   V_grade char(1) := UPPER('D');
  Grade:D  Appraisal: No such grade
  PL/SQL procedure successfully completed.
  3  循环

  •   1 简单循环
      LOOP
      要执行的语句;
      EXIT WHEN  --条件满足,退出循环语句
      END LOOP;
      3.2  WHILE 循环
      WHILE  LOOP
      要执行的语句;
      END LOOP;
      3.3  数字式循环
  []
  FOR 循环计数器 IN [ REVERSE ] 下限 .. 上限 LOOP
  要执行的语句;
  END LOOP [循环标签];
  每循环一次,循环变量自动加1;使用关键字REVERSE,循环变量自动减1。跟在IN REVERSE 后面的数字必须是从小到大的顺序,而且必须是整数,不能是变量或表达式。可以使用EXIT 退出循环。
  实例参见Oracle LOOP循环控制语句
  例1 在While循环中嵌套loop循环
  SQL> DECLARE
  2     v_m NUMBER := 101;
  3     v_i NUMBER;
  4     v_n NUMBER := 0;
  5  BEGIN
  6     WHILE v_m < 110 LOOP
  7        v_i := 2;
  8        LOOP
  9           IF mod(v_m, v_i) = 0 THEN
  10              v_i := 0;
  11              EXIT;
  12           END IF;
  13
  14           v_i := v_i + 1;
  15           EXIT WHEN v_i > v_m - 1;
  16        END LOOP;
  17
  18        IF v_i > 0 THEN
  19           v_n := v_n + 1;
  20           DBMS_OUTPUT.PUT_LINE('第'|| v_n || '个素数是' || v_m);
  21        END IF;
  22
  23        v_m := v_m + 2;
  24     END LOOP;
  25  END;
  26  /
  第1个素数是101
  第2个素数是103
  第3个素数是107
  第4个素数是109
  PL/SQL procedure successfully completed.
  4  标号和GOTO
  PL/SQL中GOTO语句是无条件跳转到指定的标号去的意思。语法如下:
  GOTO label;
  ......
   /标号是用括起来的标识符 /
  注意,在以下地方使用是不合法的,编译时会出错误。
  跳转到非执行语句前面。
  跳转到子块中。
  跳转到循环语句中。
  跳转到条件语句中。
  从异常处理部分跳转到执行。
  从条件语句的一部分跳转到另一部分。
  例1:
  SQL> 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     
  12       DBMS_OUTPUT.PUT_LINE('V_counter的当前值为:'||V_counter);
  13  END;
  14  /
  V_counter的当前值为:1
  V_counter的当前值为:2
  V_counter的当前值为:3
  V_counter的当前值为:4
  V_counter的当前值为:5
  V_counter的当前值为:6
  V_counter的当前值为:7
  V_counter的当前值为:8
  V_counter的当前值为:9
  V_counter的当前值为:10
  V_counter的当前值为:11
  PL/SQL procedure successfully completed.
  5  NULL 语句
  在PL/SQL 程序中,NULL语句是一个可执行语句,可以用 null 语句来说明“不用做任何事情”的意思,相当于一个占位符或不执行任何操作的空语句,可以使某些语句变得有意义,提高程序的可读性,保证其他语句结构的完整性和正确性。如:
  例1:
  SQL> 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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-623676-1-1.html 上篇帖子: T-SQL中INSERT、UPDATE-Alun的温故知新 下篇帖子: 适用于sql初学,学习sql语句的一些整理,其中大多是oracle的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表