首页
会员中心
到顶部
到尾部
计算机

PL/ SQL编程简介

时间:2020/10/14 13:33:17  作者:  来源:  查看:0  评论:0
内容摘要: ;'>在这里:l loop_variable是循环变量。你可以使用一个已经存在的变量作为循环变量,或者您也可以循环一个新创建的变量(如果不存在指定的变量则发生这种情况)。通过每次循环,循环变量的值增加1(如果使用REVERSE关键字则减少)。l REV...

;'>在这里:

l loop_variable是循环变量。你可以使用一个已经存在的变量作为循环变量,或者您也可以循环一个新创建的变量(如果不存在指定的变量则发生这种情况)。通过每次循环,循环变量的值增加1(如果使用REVERSE关键字则减少)。

l REVERSE表示循环变量的值是每次通过循环递减。循环变量被初始化为上边界,是递减1,直到循环变量达到下边界。你必须指定前上部边界的下边界。

l lower_bound是循环的下边界。循环的循环变量初始化为这个较低的边界提供反向是不used.

l upper_bound的上边界。如果使用反向循环变量则初始化此上边界。

下面的例子显示了一个For循环。请注意,变量v_counter2中没有明确定义,所以FOR循环会自动创建一个新的整数变量名为v_counter2

FOR v_counter2 IN 1..5

LOOP

DBMS_OUTPUT.PUT_LINE(v_counter2);

END LOOP;

The following example uses REVERSE:

FOR v_counter2 IN REVERSE 1..5

LOOP

DBMS_OUTPUT.PUT_LINE(v_counter2);

END LOOP;

在这个例子中,v_counter25开始,每次通过循环递减1,并等于1时结束。

5、游标

你可以使用游标来获取查询所返回的行。你使用游标中查询检索行,然后在光标每次从第一行取回。使用游标时,您通常会使用以下五个步骤:

1)声明变量用来存储一个行的列值。

2)声明游标,其中包含了查询。

3)打开游标

4)每次用光标一个从行中取值,存储在第1步中声明的变量的值。然后,进行一些与这些变量有关的操作,如在屏幕上显示出来,在计算中使用它们等。

5)关闭游标。

在下面的章节中中,你将了解这五个步骤的细节,你会看到一个简单的例子,得到从产品表中产品资料,名称和价格列。

步骤1:声明变量来存储列值

第一个步骤是声明用于存储列值的变量。这些变量必须是兼容的列类型。

提示:

刚才你看到,可以使用%TYPE类型声明的变量时,你使用%TYPEcolumn。 如果您使用%TYPE声明变量时,变量会自动将正确的类型。下面的示例声明三个变量来存储从产品表中的产品资料,名称和价格列,%TYPE用于自动设置的变量类型相同类型的列:

DECLARE

v_product_id products.product_id%型;

v_name products.name%型;

v_price products.price%型;

步骤2:声明游标

2步是声明游标。游标声明是一个你分配给光标或查询的执行的名称。游标声明,所有其他声明一样,要放在声明部分。声明游标的语法如下:

CURSOR cursor_name IS

SELECT_statement;

where

cursor_name is the name of the cursor.

SELECT_statement is the query.

在这里:

l cursor_name是游标的名称。

l 变量是可变的列值存储来自游标。

下面的例子声明了一个名为v_product_cursor查询的游标检索产品资料,姓名,以及从产品表列价格:

CURSOR v_product_cursor IS

SELECT product_id, name, price

FROM products

ORDER BY product_id;

查询直到打开游标才会执行。

3步:打开游标

3步是打开游标。使用OPEN语句打开游标,它必须放置在块中可执行文件里。下面的例子是执行查询,打开v_product_cursor

OPEN v_product_cursor;

步骤4:取行光标

4步是你使用FETCH语句从游标中提取行。FETCH语句读取的列值已在步骤1中声明的变量。FETCH使用语法如下:

FETCH cursor_name

INTO variable[, variable ...];

在这里:

l cursor_name是游标的名称。

l 变量是可变的列值,来自被存储游标。你需要提供每列值的匹配变量。

以下FETCH示例检索从v_product_cursor和商店中的列值的v_product_idv_name v_price的变量,之前已在第1步中创建:

FETCH v_product_cursor

INTO v_product_id, v_name, v_price;

因为游标可能包含许多行,我们需要一个循环读取它们。为了弄清楚何时结束循环,你可以使用的布尔变量v_product_cursorNOTFOUND。当没有更多的行在v_product_cursor读取是,这个变量为真。下面的例子显示了一个循环:

LOOP

-- fetch the rows from the cursor

FETCH v_product_cursor

INTO v_product_id, v_name, v_price;

-- exit the loop when there are no more rows, as indicated by

-- the Boolean variable v_product_cursor%NOTFOUND (= true when

-- there are no more rows)

EXIT WHEN v_product_cursor%NOTFOUND;

-- use DBMS_OUTPUT.PUT_LINE() to display the variables

DBMS_OUTPUT.PUT_LINE(

'v_product_id = ' || v_product_id || ', v_name = ' || v_name ||

', v_price = ' || v_price

);

END LOOP;

请注意,我用DBMS_OUTPUT.PUT_LINE()来显示读取的每一行的v_product_idv_namev_price变量。在实际应用中,你可以使用一个复杂的计算v_price

5步:关闭游标

5步是使用CLOSE语句关闭游标。关闭游标后可以释放系统资源。以下示例关闭:

v_product_cursor

CLOSE v_product_cursor;

 

 

 

 

PL/ SQL编程简介

Oracle数据库增加了一种程序的编程语言,即为被人熟知的PL / SQL(程序语言/ SQL)到Oracle数据库中。PL/ SQL使您可以编写包含SQL语句的程序。在本章中,您将了解下列PL / SQL内容:

l 块结构

l 变量和类型

l 条件逻辑

l 循环

l 返回游标:允许PL/ SQL读取结果查询

l 程序

l 功能

l 包:是用来组程序和功能集中在一个单位

l 触发器:这是当某个事件发生在运行代码块数据库

l Oracle 11g 数据库PL/ SQL功能的增强

您可以使用PL/ SQL数据库应用程序添加业务逻辑。这种集中式的业务逻辑可以通过任何可以访问数据库,包括SQL * PlusJavaC#等的程序来运行。

注意:

对于如何通过Java访问数据库的全部细节,请参阅我的书Oracle9iJDBC编程(Oracle出版社,2002年)。如何访问一个数据库,通过C#,看到我的书精通C#数据库编程(SYBEX2003)。

 

1. 块结构

PL / SQL程序被分成称为块的结构,每块都包含PL/SQLSQL语句。 PL / SQL块的结构如下:

[DECLARE

declaration_statements

]

BEGIN

executable_statements

[EXCEPTION

exception_handling_statements

]

END;

/

在这里:

l declaration_statements声明变量可用在PL / SQL块的其余部分使用。声明块是可选的。

l executable_statements的实际是可执行语句,其中可能包括循环,条件逻辑等等。

l exception_handling_statements是可以处理任何在块运行过程中可能出现的执行错误的语句。异常块是可选的。

每个语句用分号(;)中止,一个PL / SQL块使用斜线(/)字符终止。在我开始讲述PL/ SQL的细节前,大家来看到一个简单的例子来体会这种语言。下面的例子(包含的area_example.sql脚本在SQL目录)计算已知面积、高度的矩形的宽度:

SET SERVEROUTPUT ON

DECLARE

v_width INTEGER;

v_height INTEGER := 2;

v_area INTEGER := 6;

BEGIN

-- set the width equal to the area divided by the height

v_width := v_area / v_height;

DBMS_OUTPUT.PUT_LINE('v_width = ' || v_width);

EXCEPTION

WHEN ZERO_DIVIDE THEN

DBMS_OUTPUT.PUT_LINE('Division by zero');

END;

/

当你在SQL * Plus运行脚本时,SET SERVEROUTPUT ON命令让服务器输出,所以你可以在屏幕上看到DBMS_OUTPUT.PUT_LINE()产生的线。当初始命令传至PL / SQL块本身后,就会分为声明块,开始块,异常块。

声明块包含三个整数变量名为v_widthv_heightv_area(我总是把V_在开始的变量名)的声明。其中v_heightv_area变量被初始化为26

接下来是开始块,其中包含三行。第一行的注释包含文本定义宽度与面积除以高度的值相等。第二行定义v_widthv_area除以v_height,这意味着v_width设置为3= 6/2)。第三行调用DBMS_OUTPUT.PUT_LINE()在屏幕上显示v_width的值。DBMS_OUTPUT是一个内置的Oracle数据库的代码包; DBMS_OUTPUT在其他项目中,包含可让您的屏幕输出值的程序。

接下来,异常块处理任何将一个数字被零除的尝试。它通过捕获”ZERO_DIVIDE的异常。在这个例子中,实际上没有被零除的尝试,但如果你改变v_height的值为0并运行该脚本,你将会看到异常。

脚本的最后,用正斜杠字符(/)表示PL / SQL块的结束。

下面的清单显示在SQL * Plus脚本中area_example.sql的执行情况:

SQL> @ C:\SQL\area_example.sql

v_width = 3

注意:

如果你的area_example.sql脚本在目录不是C\ SQL,使用自己的目录中先前的命令。

2、变量和类型

声明块内声明的变量。正如你在前面的例子中看到,一个变量的声明都具有一个名称和一个类型。例如,v_width的变量即为v_width 整数型;

注意:

PL/ SQL类型是数据库的列类型相似。您可以在附录中看到的所有类型。下面的例子显示了更多的变量声明(这些变量可以用来存储从产品表中的列值):

v_product_id INTEGER;

v_product_type_id INTEGER;

v_name VARCHAR2 (30);

v_description VARCHAR2 (50);

v_price NUMBER (5, 2);

你也可以使用%TYPE关键字,它已经告知PL / SQL中使用相同类型指定表中的列指定变量的类型。下面的示例使用%TYPE声明一个变量相同类型的列的产品表,这是, NUMBER52)价格:

v_product_ price products. price % TYPE;

3、有条件的逻辑

你可以使用IFTHENELSEELSIFEND IF关键字来执行条件逻辑:

IF condition1 THEN

statements1

ELSIF condition2 THEN

statements2

ELSE

statements3

END IF;

在这里:

l 条件1和条件2是布尔表达式判定为真或假。

l 语句1,语句2,语句3PL / SQL语句。

条件的逻辑流程如下:

l 如果条件1为真,则语句执行。

l 如果条件1为假,但条件2为真,则语句执行。

l 如果条件1或条件2都不为真,则语句执行。

你还可以嵌入另一个IF语句在IF语句,如下面的例子:

IF v_count > 0 THEN

v_message := 'v_count is positive';

IF v_area > 0 THEN

v_message := 'v_count and v_area are positive';

END IF

ELSIF v_count = 0 THEN

v_message := 'v_count is zero';

ELSE

v_message := 'v_count is negative';

END IF;

在这个例子中,如果v_count大于0,则v_message被设置为是真的v_count”。如果v_countv_area是大于0,则v_message被设置为“v_countv_area为真。其余的逻辑很简单。

4、循环

你可以使用一个循环来运行语句零次或多次。在PL/ SQL中有三种类型的循环:

l 单循环:运行直到明确地结束循环。

l WHILE循环:运行直到出现指定的条件。

l FOR循环:按照预定数目的次数运行。

你将在下面的章节了解这些循环。

1)单循环

运行一个单循环,直到你明确地结束循环。一个单循环的语法如下:

LOOP

statements

END LOOP;

结束循环,你可以使用一个EXITEXIT WHEN语句。EXIT语句立即结束一个循环,当指定的条件发生时EXIT WHEN语句结束循环。

下面的例子显示了一个单循环。在循环开始前甲名为v_counter的变量被初始化为0。循环每增加1v_counter并并当v_counter等于5使用EXIT WHEN语句退出循环。

v_counter := 0;

LOOP

v_counter := v_counter + 1;

EXIT WHEN v_counter = 5;

END LOOP;

注意:

退出循环语句也可以出现在代码的任何地方。在Oracle 11g数据库中,你也可以使用的CONTINUECONTINUE WHEN语句结束当前迭代循环。CONTINUE语句无条件地结束当前的循环迭代,并继续执行下一次迭代。 CONTINUE WHEN语句当出现指定的条件时结束当前循环迭代时,然后继续执行下一次迭代。下面的例子显示CONTINUE语句的用法:

v_counter := 0;

LOOP

-- after the CONTINUE statement is executed, control returns here

v_counter := v_counter + 1;

IF v_counter = 3 THEN

CONTINUE; -- end current iteration unconditionally

END IF;

EXIT WHEN v_counter = 5;

END LOOP;

下一个例子显示了使用CONTINUE WHEN语句的用法:

v_counter := 0;

LOOP

-- after the CONTINUE WHEN statement is executed, control returns here

v_counter := v_counter + 1;

CONTINUE WHEN v_counter = 3; -- end current iteration when v_counter = 3

EXIT WHEN v_counter = 5;

END LOOP;

注意:

一个CONTINUECONTINUE WHEN语句不能跨越过程,函数或方法的。

2WHILE循环

while循环当指定的条件发生时运行。 WHILE循环的语法如下:

WHILE condition LOOP

statements

END LOOP;

下面的例子显示了一个当v_counter变量小于6时执行的while循环:

v_counter := 0;

WHILE v_counter < 6 LOOP

v_counter := v_counter + 1;

END LOOP;

3FOR循环

一个for循环运行预定的次数;你确定循环运行指定循环变量的上限和下限。然后循环变量递增(或递减),每一次循环。 FOR循环的语法如下:

FOR loop_variable IN [REVERSE] lower_bound..upper_bound

LOOP

statements

END LOOP;

在这里:

l loop_variable是循环变量。你可以使用一个已经存在的变量作为循环变量,或者您也可以循环一个新创建的变量(如果不存在指定的变量则发生这种情况)。通过每次循环,循环变量的值增加1(如果使用REVERSE关键字则减少)。

l REVERSE表示循环变量的值是每次通过循环递减。循环变量被初始化为上边界,是递减1,直到循环变量达到下边界。你必须指定前上部边界的下边界。

l lower_bound是循环的下边界。循环的循环变量初始化为这个较低的边界提供反向是不used.

l upper_bound的上边界。如果使用反向循环变量则初始化此上边界。

下面的例子显示了一个For循环。请注意,变量v_counter2中没有明确定义,所以FOR循环会自动创建一个新的整数变量名为v_counter2

FOR v_counter2 IN 1..5

LOOP

DBMS_OUTPUT.PUT_LINE(v_counter2);

END LOOP;

The following example uses REVERSE:

FOR v_counter2 IN REVERSE 1..5

LOOP

DBMS_OUTPUT.PUT_LINE(v_counter2);

END LOOP;

在这个例子中,v_counter25开始,每次通过循环递减1,并等于1时结束。

5、游标

你可以使用游标来获取查询所返回的行。你使用游标中查询检索行,然后在光标每次从第一行取回。使用游标时,您通常会使用以下五个步骤:

1)声明变量用来存储一个行的列值。

2)声明游标,其中包含了查询。

3)打开游标

4)每次用光标一个从行中取值,存储在第1步中声明的变量的值。然后,进行一些与这些变量有关的操作,如在屏幕上显示出来,在计算中使用它们等。

5)关闭游标。

在下面的章节中中,你将了解这五个步骤的细节,你会看到一个简单的例子,得到从产品表中产品资料,名称和价格列。

步骤1:声明变量来存储列值

第一个步骤是声明用于存储列值的变量。这些变量必须是兼容的列类型。

提示:

刚才你看到,可以使用%TYPE类型声明的变量时,你使用%TYPEcolumn。 如果您使用%TYPE声明变量时,变量会自动将正确的类型。下面的示例声明三个变量来存储从产品表中的产品资料,名称和价格列,%TYPE用于自动设置的变量类型相同类型的列:

DECLARE

v_product_id products.product_id%型;

v_name products.name%型;

v_price products.price%型;

步骤2:声明游标

2步是声明游标。游标声明是一个你分配给光标或查询的执行的名称。游标声明,所有其他声明一样,要放在声明部分。声明游标的语法如下:

CURSOR cursor_name IS

SELECT_statement;

where

cursor_name is the name of the cursor.

SELECT_statement is the query.

在这里:

l cursor_name是游标的名称。

l 变量是可变的列值存储来自游标。

下面的例子声明了一个名为v_product_cursor查询的游标检索产品资料,姓名,以及从产品表列价格:

CURSOR v_product_cursor IS

SELECT product_id, name, price

FROM products

ORDER BY product_id;

查询直到打开游标才会执行。

3步:打开游标

3步是打开游标。使用OPEN语句打开游标,它必须放置在块中可执行文件里。下面的例子是执行查询,打开v_product_cursor

OPEN v_product_cursor;

步骤4:取行光标

4步是你使用FETCH语句从游标中提取行。FETCH语句读取的列值已在步骤1中声明的变量。FETCH使用语法如下:

FETCH cursor_name

INTO variable[, variable ...];

在这里:

l cursor_name是游标的名称。

l 变量是可变的列值,来自被存储游标。你需要提供每列值的匹配变量。

以下FETCH示例检索从v_product_cursor和商店中的列值的v_product_idv_name v_price的变量,之前已在第1步中创建:

FETCH v_product_cursor

INTO v_product_id, v_name, v_price;

因为游标可能包含许多行,我们需要一个循环读取它们。为了弄清楚何时结束循环,你可以使用的布尔变量v_product_cursorNOTFOUND。当没有更多的行在v_product_cursor读取是,这个变量为真。下面的例子显示了一个循环:

LOOP

-- fetch the rows from the cursor

FETCH v_product_cursor

INTO v_product_id, v_name, v_price;

-- exit the loop when there are no more rows, as indicated by

-- the Boolean variable v_product_cursor%NOTFOUND (= true when

-- there are no more rows)

EXIT WHEN v_product_cursor%NOTFOUND;

-- use DBMS_OUTPUT.PUT_LINE() to display the variables

DBMS_OUTPUT.PUT_LINE(

'v_product_id = ' || v_product_id || ', v_name = ' || v_name ||

', v_price = ' || v_price

);

END LOOP;

请注意,我用DBMS_OUTPUT.PUT_LINE()来显示读取的每一行的v_product_idv_namev_price变量。在实际应用中,你可以使用一个复杂的计算v_price

5步:关闭游标

5步是使用CLOSE语句关闭游标。关闭游标后可以释放系统资源。以下示例关闭:

v_product_cursor

CLOSE v_product_cursor;

 

 

 

,

PL/ SQL编程简介

Oracle数据库增加了一种程序的编程语言,即为被人熟知的PL / SQL(程序语言/ SQL)到Oracle数据库中。PL/ SQL使您可以编写包含SQL语句的程序。在本章中,您将了解下列PL / SQL内容:

l 块结构

l 变量和类型

l 条件逻辑

l 循环

l 返回游标:允许PL/ SQL读取结果查询

l 程序

l 功能

l 包:是用来组程序和功能集中在一个单位

l 触发器:这是当某个事件发生在运行代码块数据库

l Oracle 11g 数据库PL/ SQL功能的增强

您可以使用PL/ SQL数据库应用程序添加业务逻辑。这种集中式的业务逻辑可以通过任何可以访问数据库,包括SQL * PlusJavaC#等的程序来运行。

注意:

对于如何通过Java访问数据库的全部细节,请参阅我的书Oracle9iJDBC编程(Oracle出版社,2002年)。如何访问一个数据库,通过C#,看到我的书精通C#数据库编程(SYBEX2003)。

 

1. 块结构

PL / SQL程序被分成称为块的结构,每块都包含PL/SQLSQL语句。 PL / SQL块的结构如下:

[DECLARE

declaration_statements

]

BEGIN

executable_statements

[EXCEPTION

exception_handling_statements

]

END;

/

在这里:

l declaration_statements声明变量可用在PL / SQL块的其余部分使用。声明块是可选的。

l executable_statements的实际是可执行语句,其中可能包括循环,条件逻辑等等。

l exception_handling_statements是可以处理任何在块运行过程中可能出现的执行错误的语句。异常块是可选的。

每个语句用分号(;)中止,一个PL / SQL块使用斜线(/)字符终止。在我开始讲述PL/ SQL的细节前,大家来看到一个简单的例子来体会这种语言。下面的例子(包含的area_example.sql脚本在SQL目录)计算已知面积、高度的矩形的宽度:

SET SERVEROUTPUT ON

DECLARE

v_width INTEGER;

v_height INTEGER := 2;

v_area INTEGER := 6;

BEGIN

-- set the width equal to the area divided by the height

v_width := v_area / v_height;

DBMS_OUTPUT.PUT_LINE('v_width = ' || v_width);

EXCEPTION

WHEN ZERO_DIVIDE THEN

DBMS_OUTPUT.PUT_LINE('Division by zero');

END;

/

当你在SQL * Plus运行脚本时,SET SERVEROUTPUT ON命令让服务器输出,所以你可以在屏幕上看到DBMS_OUTPUT.PUT_LINE()产生的线。当初始命令传至PL / SQL块本身后,就会分为声明块,开始块,异常块。

声明块包含三个整数变量名为v_widthv_heightv_area(我总是把V_在开始的变量名)的声明。其中v_heightv_area变量被初始化为26

接下来是开始块,其中包含三行。第一行的注释包含文本定义宽度与面积除以高度的值相等。第二行定义v_widthv_area除以v_height,这意味着v_width设置为3= 6/2)。第三行调用DBMS_OUTPUT.PUT_LINE()在屏幕上显示v_width的值。DBMS_OUTPUT是一个内置的Oracle数据库的代码包; DBMS_OUTPUT在其他项目中,包含可让您的屏幕输出值的程序。

接下来,异常块处理任何将一个数字被零除的尝试。它通过捕获”ZERO_DIVIDE的异常。在这个例子中,实际上没有被零除的尝试,但如果你改变v_height的值为0并运行该脚本,你将会看到异常。

脚本的最后,用正斜杠字符(/)表示PL / SQL块的结束。

下面的清单显示在SQL * Plus脚本中area_example.sql的执行情况:

SQL> @ C:\SQL\area_example.sql

v_width = 3

注意:

如果你的area_example.sql脚本在目录不是C\ SQL,使用自己的目录中先前的命令。

2、变量和类型

声明块内声明的变量。正如你在前面的例子中看到,一个变量的声明都具有一个名称和一个类型。例如,v_width的变量即为v_width 整数型;

注意:

PL/ SQL类型是数据库的列类型相似。您可以在附录中看到的所有类型。下面的例子显示了更多的变量声明(这些变量可以用来存储从产品表中的列值):

v_product_id INTEGER;

v_product_type_id INTEGER;

v_name VARCHAR2 (30);

v_description VARCHAR2 (50);

v_price NUMBER (5, 2);

你也可以使用%TYPE关键字,它已经告知PL / SQL中使用相同类型指定表中的列指定变量的类型。下面的示例使用%TYPE声明一个变量相同类型的列的产品表,这是NUMBER52)价格:

v_product_ price products. price % TYPE;

3、有条件的逻辑

你可以使用IFTHENELSEELSIFEND IF关键字来执行条件逻辑:

IF condition1 THEN

statements1

ELSIF condition2 THEN

statements2

ELSE

statements3

END IF;

在这里:

l 条件1和条件2是布尔表达式判定为真或假。

l 语句1,语句2,语句3PL / SQL语句。

条件的逻辑流程如下:

l 如果条件1为真,则语句执行。

l 如果条件1为假,但条件2为真,则语句执行。

l 如果条件1或条件2都不为真,则语句执行。

你还可以嵌入另一个IF语句在IF语句,如下面的例子:

IF v_count > 0 THEN

v_message := 'v_count is positive';

IF v_area > 0 THEN

v_message := 'v_count and v_area are positive';

END IF

ELSIF v_count = 0 THEN

v_message := 'v_count is zero';

ELSE

v_message := 'v_count is negative';

END IF;

在这个例子中,如果v_count大于0,则v_message被设置为是真的v_count”。如果v_countv_area是大于0,则v_message被设置为“v_countv_area为真。其余的逻辑很简单。

4、循环

你可以使用一个循环来运行语句零次或多次。在PL/ SQL中有三种类型的循环:

l 单循环:运行直到明确地结束循环。

l WHILE循环:运行直到出现指定的条件。

l FOR循环:按照预定数目的次数运行。

你将在下面的章节了解这些循环。

1)单循环

运行一个单循环,直到你明确地结束循环。一个单循环的语法如下:

LOOP

statements

END LOOP;

结束循环,你可以使用一个EXITEXIT WHEN语句。EXIT语句立即结束一个循环,当指定的条件发生时EXIT WHEN语句结束循环。

下面的例子显示了一个单循环。在循环开始前甲名为v_counter的变量被初始化为0。循环每增加1v_counter并并当v_counter等于5使用EXIT WHEN语句退出循环。

v_counter := 0;

LOOP

v_counter := v_counter + 1;

EXIT WHEN v_counter = 5;

END LOOP;

注意:

退出循环语句也可以出现在代码的任何地方。在Oracle 11g数据库中,你也可以使用的CONTINUECONTINUE WHEN语句结束当前迭代循环。CONTINUE语句无条件地结束当前的循环迭代,并继续执行下一次迭代。 CONTINUE WHEN语句当出现指定的条件时结束当前循环迭代时,然后继续执行下一次迭代。下面的例子显示CONTINUE语句的用法:

v_counter := 0;

LOOP

-- after the CONTINUE statement is executed, control returns here

v_counter := v_counter + 1;

IF v_counter = 3 THEN

CONTINUE; -- end current iteration unconditionally

END IF;

EXIT WHEN v_counter = 5;

END LOOP;

下一个例子显示了使用CONTINUE WHEN语句的用法:

v_counter := 0;

LOOP

-- after the CONTINUE WHEN statement is executed, control returns here

v_counter := v_counter + 1;

CONTINUE WHEN v_counter = 3; -- end current iteration when v_counter = 3

EXIT WHEN v_counter = 5;

END LOOP;

注意:

一个CONTINUECONTINUE WHEN语句不能跨越过程,函数或方法的。

2WHILE循环

while循环当指定的条件发生时运行。 WHILE循环的语法如下:

WHILE condition LOOP

statements

END LOOP;

下面的例子显示了一个当v_counter变量小于6时执行的while循环:

v_counter := 0;

WHILE v_counter < 6 LOOP

v_counter := v_counter + 1;

END LOOP;

3FOR循环

一个for循环运行预定的次数;你确定循环运行指定循环变量的上限和下限。然后循环变量递增(或递减),每一次循环。 FOR循环的语法如下:

FOR loop_variable IN [REVERSE] lower_bound..upper_bound

LOOP

statements

END LOOP;


相关评论
广告联系QQ:45157718 点击这里给我发消息 电话:13516821613 杭州余杭东港路118号雷恩国际科技创新园  网站技术支持:黄菊华互联网工作室 浙ICP备06056032号