匿名块

说明

PL/SQL(Procedural Language/SQL)过程性SQL语言,通过增加了过程性控制结构有效的扩充了SQL的功能。PL/SQL中的基本単位是“块” (block)。所有的 PL/SQL程序都是由“块”构成的,这些块可以顺序出现,也可以相互进行嵌套。

“块”(block)分为两种:命名块和匿名块。

PL/SQL 块由关键字 DECLARE、BEGIN、EXCEPTION 和 END 定义。这些关键字将“块”(block)分为声明部分、可执行部分和异常处理部分。声明和异常部分是可选的,只有可执行部分是必须有的。

匿名块(anonymous block)是没有名字的PL/SQL块。以DECLARE或BEGIN开始,每次提交都被编译。因为匿名块没有名称,所以不能在数据库中存储并且不能直接从其他PL/SQL块中调用。

命名块:包括存储过程、函数、包和触发器。命名块可以在数据库中存储并在适当的时候调用。

PLSQL_BLOCK

LABEL

block的标签。

可以为一个block定义多个标签,多个标签可以重名。

如果有嵌套的block,每个block标签可以重名。

同在一个block的子block可以重名。

DECLARE

开始Block的声明部分。

DECLARE_SECTION

包含局部声明,这些局部变量只存在于这个block,对于block的子block或相邻的其他block块不可见。

声明部分限制

  1. create_package、create_package_body、或 compound_trigger_block语句中的declare_section不能包含PRAGMA AUTONOMOUS_TRANSACTION。
  2. trigger_body或 tps_body中的declare_section不能声明LOGN或LONG RAW类型的变量。

BODY

BEGIN

开始block的执行部分。包含执行语句。

EXCEPTION

Block的异常处理部分。

END

表示block结束。

示例

create table tb_log_block(num int);

declare

v_word varchar2(20);

n_len number;

begin

v_word := ‘highgo’;

select length(v_word) into n_len from dual;

insert into tb_log_block(num) values(n_len);

end;

/