日期:2014-05-16 浏览次数:20392 次
DDL触发器,当执行DDL语句时会被触发。按照作用范围,分为schema triggers,database triggers。schema triggers作用在一个用户上,database triggers作用在整个数据库所有用户上。
要创建一个DDL触发器,语法如下:
1 CREATE [OR REPLACE] TRIGGER trigger name --创建一个触发器并制定名称,or replace是可选项
2 {BEFORE | AFTER } { DDL event} ON {DATABASE | SCHEMA} --指定触发器是在DDL事件之前、之后触发。范围是on database、on schema
3 [WHEN (...)] --可选的WHEN子句,使用逻辑判断来避免触发器无意义的执行
4 DECLARE --触发器具体内容4-7
5 Variable declarations
6 BEGIN
7 ...some code...
8 END;
Examples:
SQL> CREATE OR REPLACE TRIGGER hr.testtrigger
2 AFTER CREATE ON SCHEMA -- on schema 作用范围只是在hr用户下create table等触发,其他用户则不会。若是on database则其他用户create table时会触发该触发器
3 BEGIN
4 -- 以下使用的是事件属性
5 DBMS_OUTPUT.PUT_LINE('I believe you have created a ' ||
6 ORA_DICT_OBJ_TYPE || ' called ' ||
7 ORA_DICT_OBJ_NAME);
8 END;
9 /
Trigger created.
可用的DDL事件
DDL事件 | 触发时机 |
ALTER | 对数据库中的任何一个对象使用SQL的ALTER命令时触发 |
ANALYZE | 对数据库中的任何一个对象使用SQL的ANALYZE命令时触发 |
ASSOCIATE STATISTICS | 统计数据关联到数据库对象时触发 |
AUDIT | 通过SQL的AUDIT命令打开审计时触发 |
COMMENT | 对数据库对象做注释时触发 |
CREATE | 通过SQL的CREATE命令创建数据库对象时触发 |
DDL | 列表中所用的事件都会触发 |
DISASSOCIATE STATISTICS | 去掉统计数据和数据库对象的关联时触发 |
DROP | 通过SQL的DROP命令删除数据库对象时触发 |
GRANT | 通过SQL的GRANT命令赋权时触发 |
NOAUDIT | 通过SQL的NOAUDIT关闭审计时触发 |
RENAME | 通过SQL的RENAME命令对对象重命名时触发 |
REVOKE | 通过SQL的REVOKE语句撤销授权时触发 |
TRUNCATE | 通过SQL的TRUNCATE语句截断表时触发 |
Oracle 提供了一系列的函数用来提供关于什么触发了DDL触发器以及触发器的状态灯信息。上面那个触发器的例子就使用了属性。
DDL触发器事件以及属性函数
函数名 | 返回值 |
ORA_CLIENT_IP_ADDRESS | 客户端IP地址 |
ORA_DATABASE_NAME | 数据库名称 |
ORA_DES_ENCRYPTED_PASSWORD | 当前用户的DES算法加密后的密码 |
ORA_DICT_OBJ_NAME | 触发DDL的数据库对象名称 |
ORA_DICT_OBJ_NAME_LIST | 受影响的对象数量和名称列表 |
ORA_DICT_OBJ_OWNER | 触发DDL的数据库对象属主 |
ORA_DICT_OBJ_OWNER_LIST | 受影响的对象数量和名称列表 |
ORA_DICT_OBJ_TYPE | 触发DDL的数据库对象类型 |
ORA
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
|