自学PL/SQL 第四讲Writing Control Structures

简介:

本讲内容包括:
介绍控制语句的类型和用法
IF语句的结构
CASE表达式
介绍不同的循环语句
使用嵌套循环和标签

一:在PL/SQL中可以使用IF和LOOP进行分支判断和嵌套循环
IF语句的结构主要有:
– IF-THEN-END IF
– IF-THEN-ELSE-END IF
– IF-THEN-ELSIF-END IF

IF语句的语法:


 
 
  1. IF condition THEN  
  2.    statements;  
  3. [ELSIF condition THEN  
  4.    statements;]  
  5. [ELSE  
  6.    statements;]  
  7. END IF; 

condition是布尔型的变量(TRUE,FALSE,NULL)和表达式,只有条件返回为TRUE的时候后面的语句才会执行:
condition is a Boolean variable or expression (TRUE, FALSE,or NULL). (It is associated with a sequence of statements, which is executed only if the expression yields TRUE.)

THEN is a clause that associates the Boolean expression that precedes it with the sequence of statements that follows it. statements can be one or more PL/SQL or SQL statements. (They may include further IF statements containing several nested IF, ELSE,and ELSIF statements.)

ELSIF is a keyword that introduces a Boolean expression. (If the first condition yields FALSE or NULL then the ELSIF keyword introduces additional conditions.)
ELSE is a keyword that executes the sequence of statements that follows it if the control reaches it.

复合型的IF条件语句,可以使用AND和OR操作符


 
 
  1. IF v_ename = 'Vargas' AND salary > 6500 THEN  
  2. v_deptno :60;  
  3. END IF; 

可以嵌套IF条件语句


 
 
  1. IF condition1 THEN  
  2. statement1;  
  3. ELSE  
  4. IF condition2 THEN  
  5. statement2;  
  6. END IF;  
  7. END IF;  
  8.  
  9. IF condition1 THEN  
  10. statement1;  
  11. ELSIF condition2 THEN  
  12. statement2;  
  13. ELSIF condition3 THEN  
  14. statement3;  
  15. END IF; 

 二:CASE表达式,可以使用CASE表达式,匹配并返回结果


 
 
  1. CASE selector  
  2. WHEN expression1 THEN result1  
  3. WHEN expression2 THEN result2  
  4. ...  
  5. WHEN expressionN THEN resultN  
  6. [ELSE resultN+1;]  
  7. END;  
  8.  
  9. SQL> set serveroutput on  
  10. SQL> set verify off  
  11. SQL> define p_1=c 
  12. DECLARE  
  13.    v_1 CHAR(1) :UPPER('&p_1');  
  14.    v_2 VARCHAR2(20);  
  15. BEGIN  
  16.     v_2 :=  
  17. CASE v_1  
  18.    WHEN 'A' THEN 'ONE'  
  19.    WHEN 'B' THEN 'TWO'  
  20.    WHEN 'C' THEN 'THREE'  
  21.    ELSE 'NOTHING'  
  22. END;  
  23.    DBMS_OUTPUT.PUT_LINE ( v_2 || '  map ' || v_1);  
  24. END;  
  25.  
  26. SQL> /  
  27. THREE  map C  
  28. PL/SQL 过程已成功完成 

三:处理空值
任何值(包括空值)和空值比较返回空值,如果IF语句的条件返回为空,则后面的分支不会执行

 四:loop循环;loop循环分basic,for,while三种


 
 
  1. basic循环语法:  
  2. LOOP                             -- delimiter  
  3. statement1;                    -- statements  
  4. ...  
  5. EXIT [WHEN condition];  -- EXIT statement  
  6. END LOOP;                    -- delimiter  
  7.  
  8. condition is a Boolean variable or  
  9. expression (TRUE, FALSE, or NULL);  
  10.  
  11. for循环语法:  
  12. FOR counter IN [REVERSE]  
  13. lower_bound..upper_bound LOOP  
  14. statement1;  
  15. statement2;  
  16. ...  
  17. END LOOP;  
  18.  
  19. DECLARE  
  20. v_lower NUMBER :1;  
  21. v_upper NUMBER :100 
  22. BEGIN  
  23. FOR i IN v_lower..v_upper LOOP  
  24. ...  
  25. END LOOP;  
  26. END; 

循环指导原则:
Use the basic loop when the statements inside the loop must execute at least once.
Use the WHILE loop if the condition has to be evaluated at the start of each iteration.
Use a FOR loop if the number of iterations is known.

五:嵌套循环,循环可以被无限嵌套,在不同的循环块上使用标签,使用exit退出循环


 
 
  1. BEGIN  
  2. <<Outer_loop>> 
  3. LOOP  
  4.    v_counter :v_counter+1;  
  5.    EXIT WHEN v_counter>10;  
  6.    <<Inner_loop>> 
  7.    LOOP  
  8.    ...  
  9.   EXIT Outer_loop WHEN total_done = 'YES';  
  10.    -- Leave both loops  
  11.   EXIT WHEN inner_done = 'YES';  
  12.   -- Leave inner loop only  
  13.   ...  
  14.   END LOOP Inner_loop;  
  15.   ...  
  16. END LOOP Outer_loop;  
  17. END; 

 本文转自斩月博客51CTO博客,原文链接http://blog.51cto.com/ylw6006/656775如需转载请自行联系原作者


ylw6006

相关文章
|
1天前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
10 2
|
3月前
|
SQL Oracle 关系型数据库
SQL与PL/SQL:数据库编程语言的比较
【8月更文挑战第31天】
52 0
|
5月前
|
SQL 数据库 Perl
PL/SQL中执行按钮变为灰色后如何恢复【已解决】
PL/SQL中执行按钮变为灰色后如何恢复【已解决】
441 0
|
6月前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL游标自定义异常:数据探险家的“专属警示灯”
【4月更文挑战第19天】Oracle PL/SQL中的游标自定义异常是处理数据异常的有效工具,犹如数据探险家的警示灯。通过声明异常名(如`LOW_SALARY_EXCEPTION`)并在满足特定条件(如薪资低于阈值)时使用`RAISE`抛出异常,能灵活应对复杂业务规则。示例代码展示了如何在游标操作中定义和捕获自定义异常,提升代码可读性和维护性,确保在面对数据挑战时能及时响应。掌握自定义异常,让数据管理更从容。
|
6月前
|
SQL Oracle 安全
Oracle的PL/SQL游标异常处理:从“惊涛骇浪”到“风平浪静”
【4月更文挑战第19天】Oracle PL/SQL游标异常处理确保了在数据操作中遇到的问题得以优雅解决,如`NO_DATA_FOUND`或`TOO_MANY_ROWS`等异常。通过使用`EXCEPTION`块捕获并处理这些异常,开发者可以防止程序因游标问题而崩溃。例如,当查询无结果时,可以显示定制的错误信息而不是让程序终止。掌握游标异常处理是成为娴熟的Oracle数据管理员的关键,能保证在复杂的数据环境中稳健运行。
|
6月前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL中FOR语句循环游标的奇幻之旅
【4月更文挑战第19天】在Oracle PL/SQL中,FOR语句与游标结合,提供了一种简化数据遍历的高效方法。传统游标处理涉及多个步骤,而FOR循环游标自动处理细节,使代码更简洁、易读。通过示例展示了如何使用FOR循环游标遍历员工表并打印姓名和薪资,对比传统方式,FOR语句不仅简化代码,还因内部优化提升了执行效率。推荐开发者利用这一功能提高工作效率。
|
6月前
|
SQL Oracle 安全
Oracle的PL/SQL异常处理方法:守护数据之旅的“魔法盾”
【4月更文挑战第19天】Oracle PL/SQL的异常处理机制是保障数据安全的关键。通过预定义异常(如`NO_DATA_FOUND`)和自定义异常,开发者能优雅地管理错误。异常在子程序中抛出后会向上传播,直到被捕获,提供了一种集中处理错误的方式。理解和善用异常处理,如同手持“魔法盾”,确保程序在面对如除数为零、违反约束等挑战时,能有效保护数据的完整性和程序的稳定性。
|
2月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
4月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
92 13
|
4月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。