11.2 使用SQL*Plus操作触发器
本节将利用SQL*Plus创建常用的触发器,包括前触发、后触发、行级触发、语句级触发等,相信读者学习这些示例后能掌握触发器的使用及创建方式。
11.2.1 利用SQL*Plus创建触发器
创建触发器的首要条件是要有相关的权限。用户模式下如果想在自己的对象上创建触发器,则必须具有CREATE TRIGGER系统权限,如果想在其他用户上创建触发器,则需要有CREATE ANY TRIGGER权限。除此之外,如果在数据库上创建触发器,则需要有ADMINISTER DATABASE TRIGGER系统权限。
【示例1】一个简单的触发器
这是一个入门的触发器示例,该触发器在执行删除操作时触发,作用在PRODUCTINFO表上。具体脚本如下:
01 CREATE TRIGGER FIRST_TGR
02 AFTER DELETE
03 ON PRODUCTINFO
04 BEGIN
05 IF DELETING THEN
06 DBMS_OUTPUT.put_line('删除数据操作!');
07 END IF;
08 END;
09 /
【代码解析】
❑第1行表示创建名为FIRST_TGR的触发器。
❑第2行表示触发器类型为后触发,触发事件是删除操作。
❑第3行表示触发器作用的表是PRODUCTINFO。
❑第5~7行表示如果对表PRODUCTINFO执行删除操作则输出第6行提示。
【执行效果】
在SQL*Plus中执行上述脚本,如果成功会有如下提示:
触发器已创建
【验证触发器】
一旦触发器创建成功,那么对表PRODUCTINFO执行删除操作则会激发该触发器,因为是语句级的触发器,所以激发该触发器的时机是在删除操作之后。如果触发,则输出脚本中第6行的提示。打开SQL*Plus的输出状态,执行如下删除操作:
DELETE FROM PRODUCTINFO WHERE PRODUCTID='0240090001';
整个操作流程如图11.1所示。
图 11.1 示例1创建执行过程
细心的读者从图11.1中会发现,删除操作中实际并没有数据被删除,但依然激发了触发器。也就是说,语句触发器是删除这个事件本身激发了触发器,而和数据是否真的被删除没有必然联系。