Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5143832
  • 博文数量: 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:33:13

1.1.1 使用PL/SQL 匿名语句块

回答如下问题:

A)为什么把SQL 语句组合为PL/SQL 语句块效率会更高?

答案:使用PL/SQL 语句块中的SQL 语句更加高效,原因主要是这样做可以大幅降低网络流量,应用程序也会变得更加高效。

当客户端计算机发出一条SQL 语句时,服务器的数据库处理这个请求,并把结果集返回给客户端。因此,一条SQL 语句涉及2 次网络传输。如果发出多个SELECT 语句,网络流量会大幅增长。例如,4 条SELECT 语句会带来8 次网络传输。如果这些语句是某PL/SQL 语句块的一部分,只需要2 次网络传输,就相当于一条SELECT 语句。

B)命名和匿名PL/SQL 语句块之间存在什么差别?

答案:命名PL/SQL 语句块存储于数据库中,之后可以使用名称来引用它们。匿名PL/SQL 语句块没有名称,不会存储在数据库中,后期无法引用。

对于这两个问题,考虑如下代码:

 
提示多个Oracle 版本支持上面例子中SELECT 语句。但是,从Oracle 9i 开始,也支持新的ANSI 1999 SQL 标准,因此可以按照这个新标准修改这个SELECT 语句:
 
请注意,FROM 子句只包含一个表INSTRUCTOR 。FROM 子句后面是JOIN 子句,涉及第二个表SECTION 。接下来,ON 子句会列出两个表之间的连接条件:
 

从WHERE 子句删除这个连接条件。本书附录C 和Oracle 帮助文档包含使用新的ANSI 1999 SQL 标准的语句的详细解释和范例。本书尝试提供满足两个标准的范例;但是,本书的焦点是PL/SQL 特性,而不是SQL 。

C)基于所提供的代码范例,描述PL/SQL 语句块的结构。答案:PL/SQL 语句块包含三部分:声明部分、执行部分以及异常处理部分。执行部分是PL/ SQL 语句块中必需的部分。声明部分包含对PL/SQL 标识符的定义,如变量、常量和游标。声明部分以保留字DECLARE 开始:

 
其中包含对变量v_name 和v_total 的定义。执行部分( 如下黑体所示) 包含可执行语句。以保留字BEGIN 开始,以保留字END 结束:
 

它包含一个SELECT INTO 语句,会给变量v_name 和v_total 赋值。还包含一个DBMS_OUTPUT. PUT_LINE 语句,会在屏幕上显示这个变量的值。

PL/SQL 语句块的异常处理部分包含只会在PL/SQL 语句块出现运行时错误时才会执行的语句。

 

上述异常处理部分也包含DBMS_OUTPUT.PUT_LINE 语句,会在发生NO_DATA_FOUND 运行时错误时执行。

D)当运行时错误NO_DATA_FOUND 出现于前面所示的PL/SQL 语句块时,会发生什么事情呢?

答案:当运行时错误出现于PL/SQL 语句块时,执行控制权会传递到该语句块的异常处理部分。借助于WHEN 子句,异常NO_DATA_FOUND 会被处理。

当SELECT INTO 语句不返回任何数据行时:

 
执行控制权会传递到语句块的异常处理部分。接下来,与NO_DATA_FOUND 异常相关的DBMS_OUTPUT.PUT_LINE 语句会执行。最终结果是,消息"There is no such instructor"会显示在屏幕上。
阅读(1183) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~