AI智能
改变未来

Oracle基础之PL/SQL程序块

PL/SQL程序块

PL/SQL块由三个部分组成:说明部分、执行部分和异常处理部分。
一段完整的PL/SQL程序块结构如下所示:

DECLARE说明部分;BEGIN	/*  块开始标记  */执行部分;EXCEPTION异常处理部分;END;	/*  块结束标记  */

说明:
(1)说明部分:说明部分是可选的。由关键字DECLARE引出,用于定义常量、变量、游标、异常、复杂数据类型。在编写程序时,程序块中引用的数据对象和程序单元应遵循先定义后使用的原则。
(2)执行部分:执行部分是必需的。由关键字BEGIN开始,至END结束。PL/SQL程序块至少包含一条可执行语句,也可以嵌套其他PL/SQL程序块。
(3)异常处理部分:异常处理部分是可选的。由关键字EXCEPTION开始。当执行部分发生错误时,将会引起异常。这时,正常的执行将被停止且转移到异常程序处理。异常处理完成后,将结束对应PL/SQL块的执行。

用户在编写PL/SQL程序块时,应注意以下几点:
(1)PL/SQL的每一条语句都必须以分号”;“结束。关键字DECLARE、BEGIN、EXCEPTION后无分号,但END后一定要有分号,表示一个PL/SQL程序块的结束。
(2)注释用多行注释(/注释文本/)或单行注释(–注释文本)来表示。
(3)在执行部分可以使用的控制结构包括顺序结构、分支结构、循环结构等。在执行部分可使用SQL语句的一个子集,可使用SELECT语句、DML语句、游标操作语句,但不能使用DDL语句和DCL语句。DDL语句和DCL语句需要在相关包的支持下才能在PL/SQL中使用。在执行部分中,空语句(NULL)是合法的。
(4)当一个PL/SQL程序的说明部分和异常处理部分都没有时,不可将BEGIN和END两个关键字省略掉。
【例1】一个PL/SQL程序的说明部分和异常处理部分都没有。

set serveroutput onbegindbms_output.put_line(\'Hello Oracle!\');end;

上述语句执行后的结果是:

在本例中需注意以下三点: (1)set serveroutput on
语句用于设置环境变量serveroutput的值,当其值为on时,表示允许服务器输出PL/SQL程序的运行结果。该语句在当前会话结束前一直有效,因此不用重复书写。也就是说,在用户没有关闭SQL
Plus或者断开SQL Developer连接之前,该语句都不需要重复执行。 (2)dbms_output.put_line(···);
语句中调用了DBMS_OUTPUT包的PUT_LINE子程序,用于输出给定的字符串后换行。DBMS_OUTPUT包一般用于调试目的,输出必要的调试信息。
(3)当一个PL/SQL程序只有执行部分时,也不可将BEGIN和END两个关键字省略掉。

【例2】一个只包含空语句的PL/SQL程序块。

beginnull;end;

该程序块是合法的,只是执行后并没有做任何操作。

【例3】一个定义变量并输出的PL/SQL程序块。

set serveroutput ondeclaretemp varchar2(20);begintemp:=\'abcde\';dbms_output.put_line(temp);end;

上述语句执行后的结果是:

【例4】一个包含说明部分、执行部分和异常部分的PL/SQL程序块。

set serveroutput ondeclarei number(10);begini:=5/0;exceptionwhen zero_divide thendbms_output.put_line(\'除数不能为0\');end;

上述语句在执行部分会出错,因此转入异常进行处理,输出错误信息,从而避免了程序运行错误。zero_divide是Oracle数据库预定义的异常,数据库系统可以自动识别后转入异常处理部分。

【例5】嵌套的PL/SQL程序块。

set serveroutput ondeclarea nvarchar2(10):=\'aaa\';begindeclareb nvarchar2(10):=\'bbb\';begindbms_output.put_line(b);end;dbms_output.put_line(a);end;
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Oracle基础之PL/SQL程序块