匿名块是一种没有名字的块。[@more@]这些块在运行它们的应用程序中说明,并且为了执行在运行时由PL/SQL引擎通过。匿名块可以嵌入预编译程序(或OCI程序)、以及SQL*PLUS或SQL*DBA中。SQL*Forms中的触发器也由这些块组成,匿名块用得较多。
匿名块的定义形式为:
在说明部分中允许说明变量和常量等PL/SQL对象,这些对象在块中引用,或在嵌套的子块中引用。说明部分是可选的。在执行部分可使用SQL的DML语句,事务控制语句,还可使用控制结构如条件控制、迭代控制和顺序控制,这是PL/SQL对SQL的最重要的扩展。在PL/SQL程序中可以方便地发现和处理预定义的或用户定义的称为例外的出错条件(警告或出错条件),当发生错误时,引起(raise)一个例外,正常的执行被停止,控制转移到例外处理程序。例外处理程序也是可选的。
PL/SQL匿名块结构的例子
上面的例子说明了一个PL/SQL变量’vnum’,然后使用了一个SELECT语句。如果此变量的值为正,则修改’tTable’表。如果SELECT寻找失败,则引起NO_DATA_FOUND’的例外,控制立即转移到EXCEPTION部分,将所出问题记录到一个表'tLOG'中。
匿名块的定义形式为:
DECLARE --说明 BEGIN --语句序列 EXCEPTION --例外处理程序] END;一个PL/SQL块由三部分组成:说明部分,可执行部分和例外处理部分。
在说明部分中允许说明变量和常量等PL/SQL对象,这些对象在块中引用,或在嵌套的子块中引用。说明部分是可选的。在执行部分可使用SQL的DML语句,事务控制语句,还可使用控制结构如条件控制、迭代控制和顺序控制,这是PL/SQL对SQL的最重要的扩展。在PL/SQL程序中可以方便地发现和处理预定义的或用户定义的称为例外的出错条件(警告或出错条件),当发生错误时,引起(raise)一个例外,正常的执行被停止,控制转移到例外处理程序。例外处理程序也是可选的。
PL/SQL匿名块结构的例子
DECLARE vnum NUMBER(5); BEGIN SELECT nfield INTO vnum FROM tTable WHERE sfield=’strValue’; IF vnum>0 THEN UPDATE tTable SET nfield=nfield-1 WHERE sfield=’strValue’; INSERT INTO tLOG VALUES (‘UPDATE tTable’,SYSDATE); ENDIF; COMMIT; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT TNTO tLOG VALUES (‘not found in tTable’,SYSDATE); END;注意关键词DECLARE、BEGIN和EXCEPTION后面不用分号跟随,但是END和全部其它PL/SQL语句要求分号。
上面的例子说明了一个PL/SQL变量’vnum’,然后使用了一个SELECT语句。如果此变量的值为正,则修改’tTable’表。如果SELECT寻找失败,则引起NO_DATA_FOUND’的例外,控制立即转移到EXCEPTION部分,将所出问题记录到一个表'tLOG'中。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/174388/viewspace-916845/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/174388/viewspace-916845/