Hof*_*ann 4 sql oracle triggers plsql
我有下表和触发器。
CREATE TABLE LogSchema (
user varchar2(100),
date_ date,
operation varchar2(100),
obj_type varchar2(100),
obj_name varchar2(100)
);
CREATE OR REPLACE TRIGGER LogSchema
AFTER DDL ON USER1.SCHEMA
/* can't use ON DATABASE or else it will log
everything that happens on all schemas*/
DECLARE
BEGIN
INSERT INTO LogSchema VALUES
(USER
, SYSDATE
, sys.sysevent
, sys.dictionary_obj_type
, sys.dictionary_obj_name);
END LogSchema;
Run Code Online (Sandbox Code Playgroud)
我想记录在 USER1 架构上发生的每个 DDL 操作(创建/删除表/过程等)。仅当 USER1 执行 DDL 操作时才会执行此触发器,如果 USER2 对 USER1 架构执行 DDL 操作,例如:
CREATE TABLE USER1.TEST (
test varchar2(100)
);
Run Code Online (Sandbox Code Playgroud)
它不会被记录。有人知道我的触发器有什么问题吗?
“ON user.schema”子句并不像您想象的那样工作。来自10gR2 SQL 参考:
“只要作为架构连接的任何用户启动触发事件,就会触发触发器。”
(强调我的)
因此,触发器仅在作为 USER1 连接时记录 DDL 问题,而不是在模式 USER1 上执行 DDL 时。
| 归档时间: |
|
| 查看次数: |
3693 次 |
| 最近记录: |