gpt4 book ai didi

sql - 除了架构所有者之外,其他用户不会触发架构上的 Oracle 触发器

转载 作者:行者123 更新时间:2023-12-03 20:22:48 26 4
gpt4 key购买 nike

我有下表和触发器。

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;

我想记录在 USER1 架构上发生的每个 DDL 操作(创建/删除表/过程等)。仅当 USER1 执行 DDL 操作时才会执行此触发器,如果​​ USER2 对 USER1 架构执行 DDL 操作,例如:
CREATE TABLE USER1.TEST (
test varchar2(100)
);

它不会被记录。有人知道我的触发器有什么问题吗?

最佳答案

“ON user.schema”子句并不像您想象的那样工作。来自 10gR2 SQL Reference:

“只要作为 模式连接的任何用户 启动触发事件,就会触发触发器。”

(强调我的)

因此,触发器仅在作为 USER1 连接时记录 DDL 问题,而不是在模式 USER1 上执行 DDL 时。

关于sql - 除了架构所有者之外,其他用户不会触发架构上的 Oracle 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1640317/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com