oracle数据库之PL/SQL 流程控制语句
2024-10-21 05:38:22
介绍 PL/SQL 的流程控制语句, 包括如下三类:
1、控制语句: IF 语句
2、循环语句: LOOP 语句, EXIT 语句
3、顺序语句: GOTO 语句, NULL 语句
一、 条件语句
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:
DECLARE
v_empno emp.empno%TYPE; V_salary emp.sal%TYPE; V_comment VARCHAR2(35);
BEGIN
SELECT sal INTO v_salary FROM emp WHERE empno=v_empno;
IF v_salary<1500 THEN
V_comment:= ‘Fairly less’;
ELSIF v_salary <3000 THEN
V_comment:= ‘A little more’;
ELSE
V_comment:= ‘Lots of salary’;
END IF; DBMS_OUTPUT.PUT_LINE(V_comment);
END;
二、CASE 表达式
CASE selector
WHEN expression1 THEN result1
WHEN expression2 THEN result2
WHEN expressionN THEN resultN
[ ELSE resultN+1]
END;
DECLARE
V_grade char(1) ;
V_appraisal VARCHAR2(20); BEGIN
V_appraisal :=CASE v_grade
WHEN ‘A’ THEN ‘Excellent’
WHEN ‘B’ THEN ‘Very Good’
WHEN ‘C’ THEN ‘Good’
ELSE ‘No such grade’
END; DBMS_OUTPUT.PUT_LINE(‘Grade:‘||v_grade||’ Appraisal: ‘|| v_appraisal);
END;
三 、循环
1、简单循环
LOOP 要执行的语句; EXIT WHEN <条件语句> ; /*条件满足,退出循环语句*/ END LOOP;
例 3.
DECLARE
int NUMBER(2) :=0;
BEGIN LOOP
int := int + 1;
DBMS_OUTPUT.PUT_LINE('int 的当前值为:'||int);
EXIT WHEN int =10;
END LOOP END
2、WHILE 循环(相较 1,推荐使用 2)
WHILE <布尔表达式> LOOP
要执行的语句;
END LOOP;
例 4.
DECLARE
x NUMBER :=1;
BEGIN
WHILE x<=10 LOOP
DBMS_OUTPUT.PUT_LINE('X 的当前值为:'||x);
x:= x+1;
END LOOP; END;
3、数字式循环
FOR 循环计数器 IN [ REVERSE ] 下限 .. 上限 LOOP
要执行的语句;
END LOOP;
每循环一次,循环变量自动加 1;使用关键字 REVERSE,循环变量自动减 1。跟在 IN REVERSE 后面的数字必须是从小到大的顺序,而且必须是整数,不能是变量或表达式。可以使用 EXIT 退出循环。
例 5.
BEGIN FOR int in 1..10 LOOP DBMS_OUTPUT.PUT_LINE('int 的当前值为: '||int); END LOOP; end
例 6.
CREATE TABLE temp_table(num_col NUMBER);
DECLARE
V_counter NUMBER := 10;
BEGIN
INSERT INTO temp_table(num_col) VALUES (v_counter ); FOR v_counter IN 20 .. 25 LOOP
INSERT INTO temp_table (num_col ) VALUES ( v_counter ); END LOOP;
INSERT INTO temp_table(num_col) VALUES (v_counter ); FOR v_counter IN REVERSE 20 .. 25 LOOP
INSERT INTO temp_table (num_col ) VALUES ( v_counter );
END LOOP;
END ;
三、标号和 GOTO
PL/SQL 中 GOTO 语句是无条件跳转到指定的标号去的意思。语法如下:
GOTO label;
<<label>> /*标号是用<< >>括起来的标识符 */
例 7:
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 l_ENDofLOOP;
END IF; END LOOP;
<<l_ENDofLOOP>>
DBMS_OUTPUT.PUT_LINE('V_counter 的当前值为:'||V_counter);
END ;
四、NULL 语句
在 PL/SQL 程序中,可以用 null 语句来说明“不用做任何事情”的意思,相当于一个占位符,可以使某些语句变得有意义,提高程序的可读性。如:
DECLARE
. . .
BEGIN
…
IF v_num IS NULL THEN
GOTO print1;
END IF;
… <<print1>>
NULL; -- 不需要处理任何数据。
END;
最新文章
- 每天一个linux命令(25):linux文件属性详解
- android小技巧(二)
- [转]如何在Java中调用DLL方法
- c#如何区分静态只读变量和常量
- (Abstract Factory)抽象工厂
- [HTML]HTML5实现可编辑表格
- JS - The react framework
- YII2.0中实现高级注册
- http请求数据
- hibernate 打印sql和参数的配置
- UVa 1395 (最小生成树)
- Struts2 06--系统拦截器防止数据重复提交
- GET与POST请求的区别
- eclipse 启动报内存溢出的问题out of memory!
- python,pip环境变量设置
- 第四范式涂威威:AutoML技术现状与未来展望
- no module named &#39;win32api&#39;问题
- (转)ZooKeeper的Znode剖析
- sql语句查询结果合并union all用法
- logback配置详解
热门文章
- npm 取消代理 npm config delete proxy
- numpy如何使用
- git创建使用1https://blog.csdn.net/Hanani_Jia/article/details/77950594
- react-router 4.0版本使用笔记
- QOS-交换机拥塞管理
- 剑指offer题目系列三(链表相关题目)
- Codeforces Round #482 (Div. 2) : Kuro and GCD and XOR and SUM (寻找最大异或值)
- LeetCode初级算法的Python实现--字符串
- program files与program files(x86)的区别
- 北京Uber优步司机奖励政策(1月2日)