DB2 10.5 for Linux, UNIX, and Windows

匿名块语句 (PL/SQL)

PL/SQL 匿名块语句是可以包含 PL/SQL 控制语句和 SQL 语句的可执行语句。它可以用来在脚本语言中实现过程逻辑。在 PL/SQL 上下文中,此语句可以由 DB2® 数据服务器编译和执行。

匿名块语句并不保存在数据库中,并且,它可以包含多达 3 个节:可选的声明节、必需的可执行节以及可选的异常节。

可选的声明节可以包含将由可执行节和异常节中的语句使用的变量、游标和类型的声明,并且被插入到可执行的 BEGIN-END 块之前。

可选的异常节可以被插入到 BEGIN-END 块的末尾附近。异常节必须以关键字 EXCEPTION 开始,并且一直持续到它所在的块的末尾为止。

调用

可以从交互式工具或命令行界面(例如 CLP)中执行此语句。另外,还可以在 PL/SQL 过程定义、函数定义或触发器定义中嵌入此语句。在这些上下文中,此语句被称为块结构,而不是被称为匿名块语句。

权限

调用匿名块不需要任何特权。但是,此语句的授权标识所拥有的特权必须包括调用匿名块中嵌入的 SQL 语句所必需的所有特权。

语法

阅读语法图跳过直观语法图
                                            .-----------.   
                                            V           |   
>>-+------------------------------+--BEGIN----statement-+------->
   |              .-------------. |                         
   |              V             | |                         
   '-+---------+----declaration-+-'                         
     '-DECLARE-'                                            

>--+-----------------------------------------------------------------------------------+-->
   |            .--------------------------------------------------------------------. |   
   |            |       .-----------------------------.        .-------------------. | |   
   |            V       V                             |        V                   | | |   
   '-EXCEPTION----WHEN----exception-condition--+----+-+--THEN----handler-statement-+-+-'   
                                               '-OR-'                                      

>--END---------------------------------------------------------><

描述

DECLARE
用于开始 DECLARE 语句的可选关键字,此关键字可用于声明数据类型、变量或游标。此关键字的使用取决于此块所在的上下文。
declaration
指定作用域限定于块的数据类型、变量、游标、异常或过程声明。每个声明都必须以分号终止。
BEGIN
用于引入可执行节的必需关键字,该节可以包含一个或多个 SQL 或 PL/SQL 语句。BEGIN-END 块可以包含嵌套的 BEGIN-END 块。
statement
指定 PL/SQL 或 SQL 语句。每个语句都必须以分号终止。
EXCEPTION
用于引入异常节的可选关键字。
WHEN exception-condition
指定用于测试一种或多种异常的条件表达式。
THEN handler-statement
指定所抛出的异常与 exception-condition 中的异常匹配时要执行的 PL/SQL 或 SQL 语句。每个语句都必须以分号终止。
END
用于结束块的必需关键字。

示例

以下示例说明 DB2 数据服务器可以编译的最简单的匿名块语句:
BEGIN 
    NULL;
END;
以下示例说明您可以通过 DB2 CLP 以交互方式输入的匿名块:
SET SERVEROUTPUT ON;

BEGIN 
  dbms_output.put_line( 'Hello' );
END;
以下示例说明您可以通过 DB2 CLP 以交互方式输入的带有声明节的匿名块:
SET SERVEROUTPUT ON;

DECLARE
   current_date DATE := SYSDATE;
BEGIN 
     dbms_output.put_line( current_date );
END;