Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4984139
  • 博文数量: 1696
  • 博客积分: 10870
  • 博客等级: 上将
  • 技术积分: 18357
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-30 15:16
文章分类
文章存档

2017年(1)

2016年(1)

2015年(1)

2013年(1)

2012年(43)

2011年(17)

2010年(828)

2009年(568)

2008年(185)

2007年(51)

分类: 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 语句块。

 
阅读(851) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~