分类: 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 语句块没有名称,不会存储在数据库中,后期无法引用。
对于这两个问题,考虑如下代码:
从WHERE 子句删除这个连接条件。本书附录C 和Oracle 帮助文档包含使用新的ANSI 1999 SQL 标准的语句的详细解释和范例。本书尝试提供满足两个标准的范例;但是,本书的焦点是PL/SQL 特性,而不是SQL 。
C)基于所提供的代码范例,描述PL/SQL 语句块的结构。答案:PL/SQL 语句块包含三部分:声明部分、执行部分以及异常处理部分。执行部分是PL/ SQL 语句块中必需的部分。声明部分包含对PL/SQL 标识符的定义,如变量、常量和游标。声明部分以保留字DECLARE 开始:
它包含一个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 语句不返回任何数据行时: