分类: Oracle
2009-09-08 01:27:07
2.1.7 理解语句块、嵌套语句块和标签的作用范围
当在PL/SQL 语句块中使用变量时,必须理解变量的作用范围。这样才能理解和掌握如何以及何时可以使用变量。也有助于调试自己所编写的程序。PL/SQL 语句块的开始部分包含声明内容。在此可以声明语句块中会使用的变量。
1. 变量的作用范围
在声明部分所定义结构体的作用范围或者生存期就是当前语句块。语句块也提供所声明和抛出的异常的作用范围。本书第8 章、第9 章和第10 章会更加详细讨论异常。变量的作用范围是可以访问变量,或者变量可见的程序片断。通常,变量的作用范围是声明当前该变量的语句块。变量的可见性是变量可以 被访问的程序片断。
2. 标签和嵌套语句块
标签可以添加到语句块,以改进代码的可读性,以及限定嵌套语句块中存在相同名称的元素。语句块的名称必须在可执行代码第1 行(或者BEGIN 或者DECLARE)的前面,如下所示:
B)现在,运行这个程序,并查看是否输出自己所期望的结果。请解释在本例中,执行焦点如何从一个语句块转移到其他语句块?
答案:在语句块的声明部分,变量e_Show_Exception_Scope 被声明为异常类型。在此处,变量v_student_id 被声明为NUMBER 类型,初始值为123 。这个变量的作用范围是整个语句块,但是只能在内部语句块的外面可见。当内部语句块执行时,会声明另一个变量v_student_id 。该变量的数据类型是VARCHAR2(8),并被初始化为125 。这个变量的作用范围和可见性都是内部语句块。使用DBMS_OUTPUT 有助于显示哪个变量是可见的。内部语句块会抛出异常e_Show_Exception_Scope:这意味着,执行焦点离开可执行部分,进入异常部分。在 异常处理部分,会查找一个名为e_Show_Exception_Scope 的异常。由于内部语句块没有与此名称相同的异常,则执行焦点转移到外部语句块的异常处理部分,并定位到这个异常。这时候,内部变量 v_student_id 已经超出作用范围和可见性范围。现在,外部变量v_student_id (始终有效)重新变得可视。因为这个异常有个IF/THEN 结构,会执行DBMS_ OUTPUT 调用。这是嵌套语句块的简单应用。本书后面会提供更加复杂的范例。在学习本书第8 章、第9 章和第10 章中异常处理内容之后,会看到嵌套语句块有非常大的价值。