分类: Oracle
2009-09-07 22:27:37
1.1 在客户端/ 服务器架构中PL/SQL 的应用(2)
1. PL/SQL 语句块结构
在PL/SQL 中,语句块是最基本的单元。所有的PL/SQL 程序都组合为语句块。这些语句块也可以进行嵌套。通常,PL/SQL 语句块会合并表示单个逻辑任务的语句。因此,在一个程序中,不同的任务会被分割为不同的语句块。这样更有利于理解和维护程序逻辑。
PL/SQL 语句块可以分为两种:命名和匿名。当创建子程序时,使用命名的PL/SQL 语句块。这些子程序可以是过程、函数和包。然后,把这些子程序保存在数据库中,后期可以使用其名称进行引用。除此之外,也可以在匿名PL/SQL 语句块中,定义诸如过程或者函数等子程序。这些子程序的生命周期与语句块执行时间相同,并且不能在语句块之外引用它们。换句话说,在PL/ SQL 语句块中定义的子程序不能被其他PL/SQL 语句块引用,也不能使用其名称进行引用。本书的第19 章到第21 章会继续讨论子程序。你可能已经猜测到,匿名的PL/SQL 语句块没有定义名称。这样的话,这些子程序不在数据库中存储,无法在后期引用。
PL/SQL 语句块包含三部分:声明部分、可执行部分以及异常处理部分。可执行部分是语句块中唯一要求必须存在的部分。声明部分和异常处理部分是可选的。PL/SQL 语句块的结构通常如下所示:
2. 声明部分
声明部分是PL/SQL 语句块中的第一部分,包含对PL/SQL 标识符的定义,例如变量、常量、游标等。本书通篇都会在合适的时候,详细介绍所使用的PL/SQL 标识符。
这个范例是某匿名PL/SQL 语句块的声明部分。首先是保留字DECLARE,包含2 个变量声明和1 个常量声明。变量名v_?rst_name 和v_last_name 的后面是数据类型和大小。常量名c_counter 的后面是保留字CONSTANT 、数据类型以及所赋的值。请注意,每个声明语句后面都有一个分号。
3. 可执行部分
PL/SQL 语句块的下一部分是可执行部分。这部分包含可执行的语句,允许操作声明部分所声明的变量。
上述范例演示了PL/SQL 语句块的可执行部分。首先是保留字BEGIN,包含一个操作STUDENT 表的SELECT INTO 语句。学生ID 为123 的学生的名字和姓氏被赋予变量v_?rst_name 和v_last_name 。(本书第3 章会详细讨论SELECT INTO 语句)。接着,借助于DBMS_OUTPUT. PUT_LINE 语句,在屏幕上显示变量v_?rst_name 和v_last_name 的值。本章稍后会详细讨论这个语句。语句块中可执行部分的结尾是保留字END 。
提示任何PL/SQL 语句块中可执行部分必须以保留字BEGIN 开始,以保留字END 结束。
4. 异常处理部分
PL/SQL 语句块的最后一部分是异常处理部分。这部分包含当语句块发生运行时错误时会执行的语句。PL/SQL 编译器未能发现且在程序执行时出现的错误称为运行时错误。当发生运行错误时,执行权就传递给语句块的异常处理部分。然后,在此错误被处理,并抛出或者执行 特定的异常。下面的范例很好地展示了异常处理部分。
这个范例演示了PL/SQL 语句块的异常处理部分。首先是保留字EXCEPTION 。WHEN 子句会判断哪些异常必须被抛出。在这个范例中,只有一个名为NO_DATA_FOUND 的异常,当SELECT INTO 语句不返回任何数据行时抛出。如果STUDENT 表中不包含任何有关学生ID 为123 的学生记录,则执行控制权传递给异常处理部分,DBMS_OUTPUT.PUT_LINE 语句也会执行。本书第8 章、第9 章和第10 章包含有关异常处理部分的更多讨论。
到目前为止,我们已经讨论声明部分、可执行部分以及异常处理部分。现在考虑把这些范例集成到一个PL/SQL 语句块。