您的位置:首页 > 数据库 > Oracle

ORACLE PL/SQL练习(六)

2015-02-01 12:45 281 查看
PL/SQL循环结构

PL/SQL提供了3种不同类型的循环结构:

简单循环或者无限循环;

FOR循环(数值循环或者游标循环);

WHILE循环。

循环属性:
属性说明
循环如何结束循环即反复地执行代码,该如何让循环结束执行呢?
什么时候测试是否该结束循环这个结束测试是在循环一开始就做呢,还是在循环的末尾进行?各自的后果是什么?
采用这种循环的原因是什么因素促使你考虑选择了某种循环?
简单循环:以LOOP关键字开始,以END LOOP关键字结束。要考循环体内的EXIT,EXIT WHEN或者RETURN来退出循环(或者有异常抛出)。

CREATE OR REPLACE PROCEDURE display_multiple_years (
start_year_in IN PLS_INTEGER
, end_year_in IN PLS_INTEGER
)
IS
l_current_year PLS_INTEGER := start_year_in;
BEGIN
LOOP
EXIT WHEN l_current_year > end_year_in;
display_total_sales (l_current_year);
l_current_year := l_current_year + 1;
END LOOP;
END display_multiple_years;

FOR循环
Oracle提供了数值型和游标型的FOR循环,要使用数值型FOR循环,需指定循环开始的整数值和结束整数值。
PL/SQL会完成剩下的工作,迭代每一个中间取值,然后结束循环。

DROP TABLE sales_data
/

CREATE TABLE sales_data (year INTEGER, sales_amount NUMBER)
/

CREATE OR REPLACE PROCEDURE display_total_sales (year_in IN PLS_INTEGER)
IS
BEGIN
DBMS_OUTPUT.put_line ('Total for year ' || year_in);
END display_total_sales;
/

CREATE OR REPLACE PROCEDURE display_multiple_years (
start_year_in IN PLS_INTEGER
, end_year_in IN PLS_INTEGER
)
IS
l_current_year PLS_INTEGER := start_year_in;
BEGIN
LOOP
EXIT WHEN l_current_year > end_year_in;
display_total_sales (l_current_year);
l_current_year := l_current_year + 1;
END LOOP;
END display_multiple_years;
/

CREATE OR REPLACE PROCEDURE display_multiple_years (
start_year_in IN PLS_INTEGER
, end_year_in IN PLS_INTEGER
)
IS
BEGIN
FOR l_current_year IN start_year_in .. end_year_in
LOOP
display_total_sales (l_current_year);
END LOOP;
END display_multiple_years;

游标型的FOR循环使用相通的基本结构,但需要提供一个明确地游标或者SELECT语句,而不是数值型FOR循环使用的整数的上下边界。

CREATE OR REPLACE PROCEDURE display_multiple_years (
start_year_in IN PLS_INTEGER
, end_year_in IN PLS_INTEGER
)
IS
BEGIN
FOR l_current_year IN (SELECT *
FROM sales_data
WHERE year BETWEEN start_year_in AND end_year_in)
LOOP
-- This procedure is now accepted a record implicitly declared
-- to be of type sales_data%ROWTYPE...
display_total_sales (l_current_year.year);
END LOOP;
END display_multiple_years;

WHILE循环
WHILE循环和简单循环非常相似,一个关键的区别在于WHILE循环会在每次循环之前检查是否满足终止条件,循环体内的代码有可能一次也不会执行。

CREATE OR REPLACE PROCEDURE display_multiple_years (
start_year_in IN PLS_INTEGER
, end_year_in IN PLS_INTEGER
)
IS
l_current_year PLS_INTEGER := start_year_in;
BEGIN
WHILE (l_current_year <= end_year_in)
LOOP
display_total_sales (l_current_year);
l_current_year := l_current_year + 1;
END LOOP;
END display_multiple_years;

每个循环结构都包括两部分:循环边界和循环体

循环边界由一些保留字组成,包括初始化循环,终止循环的条件,终止循环的END LOOP语句。

循环体:这是一系列的位于循环边界内的可执行语句,这些语句在每一次循环内都要执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SQL PL/SQL