Oracle PL/SQL进阶编程(第十三弹:系统事件触发器)

DML触发器和替代触发器都是在DML事件上触发的 ,而系统触发器是在DDL事件和数据库服务器事件时触发的。

定义系统触发器

语法如下:

CREATE [OR REPLACE] TRIGGER trigger_name
{
   
   BEFORE | AFTER} {DDL event |DATABASE event}
ON {
   
   DATABASE | SCHEMA}
[WHEN [...]]
plsql_block

DDL event包括ALTER、ANALYZE、ASSOCIATE STATISTICS、AUDIT、COMMENT、CREATE、DROP、GRANT、RENAME、REVOKE、TRUNCATE等。
DATABASE event是数据库级的系统事件,对每一个触发的事件,Oracle会打开一个匿名事务,触发触发器,提交任何独立的事务,这些事件有SERVERERROR、LOGON、LOGOFF、STARTUP、SHUTDOWN、SUSPEND。

在创建数据库级的触发器时,必须具有ADMINISTER DATABASE TRIGGER的系统权限。

代码如下:

CREATE TABLE created_log
(
    obj_owner VARCHAR2(30),   --所有者
    obj_name  VARCHAR2(30),   --对象名称
    obj_type  VARCHAR2(20),   --对象类型
    obj_user VARCHAR2(30),    --创建用户
    created_date DATE     --创建日期
)

CREATE OR REPLACE TRIGGER t_created_log
   AFTER CREATE ON scott.SCHEMA                  --在soctt方案下创建对象后触发
BEGIN
   --插入日志记录
   INSERT INTO scott.created_log(obj_owner, obj_name,
                obj_type, obj_user, created_date
               )
        VALUES (SYS.dictionary_obj_owner, SYS.dictionary_obj_name,
                SYS.dictionary_obj_type, SYS.login_user, SYSDATE
               );
END;

触发器事件列表

DDL触发器事件列表如下:

事件 触发时机 描述
CRAETE BEFORE/AFTER 在创建一个方案对象之前或之后触发,比如创建表、索引等对象
DROP BEFORE/AFTER 在删除一个方案对象之前或之后触发
ALTER BEFORE/AFTER
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值