当前位置:
文档之家› 《数据库》第十二章 控制语句
《数据库》第十二章 控制语句
DECLARE v_counter NUMBER(1):=0;
BEGIN LOOP
v_counter:=v_counter+1; DBMS_OUTPUT.PUT_LINE('The current value of the counter is '||v_counter); EXIT WHEN v_counter=4; END LOOP; END;
9
Inspur Education
CASE 表达式
根据不同的输入打印不同的信息
DECLARE v_grade char(1) := UPPER('&p_grade'); 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;
6
Inspur Education
执行控制--IF语句
例编写PL/SQL语句块,计算所购买图书的零售价, 然后
DECL确AR定E 在发货时应该包括的礼品。
v_gift VARCHAR2(20); c_retailprice NUMBER(5,2):=29.95; BEGIN IF c_retailprice>56 THEN
使用它们,以便重复执行一组语句:
• 基本循环 • FOR循环 • WHILE循环
12
Inspur Education
循环控制--基本loop循环
基本循环的语法:
说明:
LOOP statements; EXIT [WHEN condition];
END LOOP;
• 基本循环用来执行语句,直到满足了EXIT子句指定的条件为止 。
3
Inspur Education
流程控制
顺序控制用于按顺序执行语句 可以使用选择语句和循环来更改PL/SQL块的可执行部
分中的语句的执行顺序。
4
Inspur Education
选择结构—IF语句
如果一个条件为TRUE,那么IF语句将决定是否应该执 行一个语句。
IF语法结构
IF condition THEN statements;
以循环中任何语句至少自动执行一次。这被称为“后测 试”(post-test)。在执行语句之后,将评估EXIT子 句中列出的任何条件,如果添加为TRUE,那么循环将会 结束,然后将执行PL/SQL块的其余部分。
14
Inspur Education
循环控制--基本循环
例子:创建一个打印一系列数字的循环。
7
Inspur Education
练习
1.请按以下对应关系,根据成绩的不同,打印出对应的 级别
>90 A >80 B >70 C >60 D <=60 E
8
Inspur Education
执行控制--CASE 表达式
CASE selector WHEN expression1 THEN result1 WHEN expression2 THEN result2 WHEN expressionN THEN resultN [ ELSE resultN+1] END;
Inspur Education
第十二章 控制语句
Inspur Education
知识点回顾
理解 PL/SQL 功能和特点 了解数据类型及其用法 理解逻辑比较 掌握错误处理
2
Inspur Education
本章目标
顺序结构控制语句 选择结构控制语句
• if语句 • Case语句
循环结构控制语句
• 基本loop循环 • while循环 • for循环
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; DROP TABLE temp_table;
20
Inspur Education
WHILE循环
WHILE循环语法: 说明:
• 执行一系列语句,直到条件变为FALSE为止。与前面循环不同 ,如果条件最初为FALSE,那么永远不能进入这个循环。
• 在WHILE子句提供的条件决定了循环将在何时终止。
WHILE condition LOOP statements;
顺序控制--标签声明
标签声明由封装在<< >>中的label_name组成,后面至 少要有一条可执行的语句。语法如下所示:
<<label_name>> {...statements...}
27
Inspur Education
顺序控制--GOTO语句
执行GOTO语句时,控制会立即转到由标签标记的语句 。语法如下所示:
GOTO label_name;
• 对于块、循环、IF语句而言,从外层跳转 到内层是非法的。
• label_name在代码范围内必须是唯一的。 • 标签声明后必须至少有一个语句要执行。
28
Inspur Education
例子:判断一个数字37是否为质数
DECLARE p VARCHAR2(30); n PLS_INTEGER := 37;
15
Inspur Education
练习
1.请打印出1~10之间的偶数
16
Inspur Education
循环控制--FOR循环
FOR循环的语法
FOR counter IN[REVERSE] lower_limit..upper_limit LOOP statements;
END LOOP;
说明
10
Inspur Education
练习
1.请按以下对应关系,根据信号灯的不同,打印出对应 的行为
红灯 停 绿灯 行 黄灯 等
11
Inspur Education
循环控制
希望反复执行PL/SQL块的可执行部分中的语句。 创建一个循环,其中包括要执行的语句,这个循环一直
重复,直到满足某个条件为止,这时将会退出循环。 有三种类型的循环,你可以在PL/SQL块的可执行部分
之后,就将退出这个循环。 • 如果在这个子句中包括了REVERSE关键字,那么计数器可以采取相反的
方式(计数器减少)
17
Inspur Education
循环控制--FOR循环
例子:
• FOR循环使用i作为循环计数器,IN关键字指 定范围
BEGIN FOR I IN 1..10 LOOP DBMS_OUTPUT.PUT_LINE('The current value of
END LOOP;
21
Inspur Education
WHILE循环
例子:PL/SQL块中使用WHILE循环来显示变量的值, 直到指定的条件为FALSE为止。
DECLARE v_counter NUMBER(2):=0;
BEGIN WHILE v_counter<15 LOOP DBMS_OUTPUT.PUT_LINE('The current
• FOR循环也使用一个计数器来控制循环的执行次数。 • 计数器不是一个必须在PL/SQL块的声明部分声明的变量。在第一次执
行LOOP时,将隐含声明计数器。 • FOR子句要求用户指出计数器的上限和下限。也即,必须指定计数器
的初始值(lower_limit)以及终止循环的值(upper_limit)。 • 在每一次执行循环时,计数器都将增加1。到达定义为计数器上限的值
BEGIN FOR j in 2..ROUND(SQRT(n)) LOOP IF n MOD j = 0 THEN p := ' is not a prime number'; GOTO print_now; END IF; END LOOP; p := ' is a prime number'; <<print_now>> DBMS_OUTPUT.PUT_LINE(TO_CHAR(n) || p);
the counter is '||i); END LOOP;
END;
18
Inspur Education
练习
1.请打印出15~25之间的所有数
19
Inspur Education
循环控制--FOR循环
CREATE TABLE temp_table(num_col NUMBER); DECLARE
嵌套的循环
任何类型的循环都可以嵌套在另一个循环中。 注意:在控制返回外部循环之前,必须完成内部循环的执行。在