LES18编写控制结构
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
18-7
IF-THEN-ELSIF语句执行流程 语句执行流程
IF 条件 TRUE FALSE ELSIF 条件 TRUE THEN 操作 ELSE 操作 FALSE
THEN 操作
18-8
IF-THEN-ELSIF语句 语句
. . . IF v_start > 100 THEN v_start := 2 * v_start; ELSIF v_start >= 50 THEN v_start := .5 * v_start; ELSE v_start := .1 * v_start; END IF; . . .
循环语句
• 基本循环 • FOR循环 循环 • WHILE循环 循环
18-13
基本循环
语法
LOOP statement1; . . . EXIT [WHEN condition]; END LOOP; -- delimiter -- statements -- EXIT statement -- delimiter
v_flag := v_reorder_flag AND v_available_flag;
V_REORDER_FLAG TRUE TRUE NULL NULL
V_AVAILABLE_FLAG TRUE FALSE TRUE FALSE
V_FLAG TRUE FALSE NULL FALSE
18-12
18-21
小结
使用以下控制结构可以改变程序流程: 使用以下控制结构可以改变程序流程: • 条件分支语句(IF语句) 条件分支语句( 语句 语句) • 循环语句
– 基本循环 – FOR循环 循环 – WHILE循环 循环 – EXIT语句 语句
18-22
习题
1. 运行lab19_1.sql建立表 建立表MESSAGES,建立 运行 建立表 , PL/SQL块给 块给MESSAGES表插入数字 到10(排除 表插入数字1到 (排除6 块给 表插入数字 ),并提交事务 和8),并提交事务 ), 2. 运行lab19_2.sql为EMP插入一条记录,建立 为 插入一条记录, 运行 插入一条记录 PL/SQL块计算雇员补助,方法如下: 块计算雇员补助, 块计算雇员补助 方法如下:
18-15
FOR循环 循环
语法
FOR counter in [REVERSE] lower_bound..upper_bound LOOP statement1; statement2; . . . END LOOP;
18-16
FOR循环 循环
DECLARE v_ordid item.ordid%TYPE := 101; BEGIN FOR i IN 1..10 LOOP INSERT INTO item(ordid, itemid) VALUES(v_ordid, i); END LOOP; END;
TRUE IF 条件 FALSE
THEN 操作
ELSE 操作
18-6
IF-THEN-ELSE 语句
... IF v_shipdate - v_orderdate < 5 THEN v_ship_flag := 'Acceptable'; ELSE v_ship_flag := 'Unacceptable'; END IF; ...
18-19
嵌套循Hale Waihona Puke Baidu和标号
• 循环可以嵌套 • 使用标号可以区分块和循环 • EXIT引用标号可以直接退出多层循环 引用标号可以直接退出多层循环
18-20
嵌套循环和标号
... BEGIN <<Outer_loop>> LOOP v_counter := v_counter+1; EXIT WHEN v_counter>10; <<Inner_loop>> LOOP ... EXIT Outer_loop WHEN total_done = 'YES'; -- Leave both loops EXIT WHEN inner_done = 'YES'; -- Leave inner loop only ... END LOOP Inner_loop; ... END LOOP Outer_loop; END;
Condition:Boolean变量或表达式 (TRUE, FALSE,或NULL); 或 变量或表达式
18-14
基本循环
DECLARE v_ordid item.ordid%TYPE := 101; v_counter NUMBER(2) := 1; BEGIN LOOP INSERT INTO item(ordid, itemid) VALUES(v_ordid, v_counter); v_counter := v_counter + 1; EXIT WHEN v_counter > 10; END LOOP; END;
18
编写控制结构
目标
• 确定控制结构的作用和类型 • 构造 语句 构造IF语句 • 构造并确定不同类型循环语句 • 使用嵌套循环和标号控制块流程
18-2
控制PL/SQL执行流程 执行流程 控制
• • 条件分支语句 循环语句
18-3
IF语句 语句
IF condition THEN statements; [ELSIF condition THEN statements;] [ELSE statements;] END IF;
18-4
简单IF语句 简单 语句
. . . IF v_ename = 'MILLER' THEN v_job := 'SALESMAN'; v_deptno := 35; v_new_comm := sal * 0.20; END IF; . . .
18-5
IF-THEN-ELSE 语句执行流程
18-9
建立逻辑条件
使用IS 操作符测试NULL • 使用 NULL操作符测试 操作符测试 • 包含 包含NULL表达式的结果为 表达式的结果为NULL 表达式的结果为 • 使用连接表达式时将 使用连接表达式时将NULL作为空串对待 作为空串对待
18-10
逻辑表
AND TRUE FALSE NULL OR TRUE FALSE NULL NOT
TRUE
TRUE
FALSE
NULL
TRUE
TRUE
TRUE
TRUE
TRUE
FALSE
FALSE
FALSE FALSE FALSE
FALSE TRUE FALSE
NULL
FALSE
TRUE
NULL
NULL
FALSE
NULL
NULL
TRUE
NULL
NULL
NULL
NULL
18-11
Boolean条件 条件
18-23
a. b. c. d. e. f.
使用替代变量输入雇员号 如果工资低于1000,则设置补助为工资的10% ,则设置补助为工资的 如果工资低于 如果工资在1000和1500之间,则设置补助为工资的 和 之间, 如果工资在 之间 则设置补助为工资的15% 如果工资高于1500,则设置补助为工资的20% ,则设置补助为工资的 如果工资高于 如果工资为NULL,则设置补助为0 ,则设置补助为 如果工资为 提交事务
18-17
WHILE循环 循环
语法
WHILE condition LOOP statement1; statement2; . . . END LOOP; 每次循环检查条件
18-18
WHILE循环 循环
ACCEPT p_price PROMPT 'Enter the price of the item: ' ACCEPT p_itemtot PROMPT 'Enter the maximum total for purchase of item: ' DECLARE ... v_qty NUMBER(8) := 1; v_running_total NUMBER(7,2) := 0; BEGIN ... WHILE v_running_total < &p_itemtot LOOP ... v_qty := v_qty + 1; v_running_total := v_qty * &p_price; END LOOP; ...