Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4984164
  • 博文数量: 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-08 01:27:07

2.1.7 理解语句块、嵌套语句块和标签的作用范围

当在PL/SQL 语句块中使用变量时,必须理解变量的作用范围。这样才能理解和掌握如何以及何时可以使用变量。也有助于调试自己所编写的程序。PL/SQL 语句块的开始部分包含声明内容。在此可以声明语句块中会使用的变量。

1. 变量的作用范围

在声明部分所定义结构体的作用范围或者生存期就是当前语句块。语句块也提供所声明和抛出的异常的作用范围。本书第8 章、第9 章和第10 章会更加详细讨论异常。变量的作用范围是可以访问变量,或者变量可见的程序片断。通常,变量的作用范围是声明当前该变量的语句块。变量的可见性是变量可以 被访问的程序片断。

 

2. 标签和嵌套语句块

标签可以添加到语句块,以改进代码的可读性,以及限定嵌套语句块中存在相同名称的元素。语句块的名称必须在可执行代码第1 行(或者BEGIN 或者DECLARE)的前面,如下所示:

 
 
这个范例会产生如下输出:
 
A)如果在SQL *Plus 中运行如下范例,试想会在屏幕上看到什么?
 
答案:会得到如下输出:
 

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 章中异常处理内容之后,会看到嵌套语句块有非常大的价值。

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