暂无图片
https://blog.csdn.net/royalwzy/article/details/61479 有人写过oracle这种功能的触发器吗?
我来答
分享
zero
2020-03-04
https://blog.csdn.net/royalwzy/article/details/61479 有人写过oracle这种功能的触发器吗?

我想写个oracle触发器,记录表结构操作(修改表/修改表注释/修改列信息)

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
莫得感情的萝卜头

CREATE OR REPLACE TRIGGER
trigger_name
after
alter table ********
ON schema
[WHEN condition]
PL/SQL_block | CALL procedure_name;

暂无图片 评论
暂无图片 有用 0
郭耀龙

可以用DDL触发器实现,思路如下:

--创建DDL触发器
CREATE OR REPLACE TRIGGER SYS.TRG_DDL_LOGS
AFTER DDL ON DATABASE
DECLARE
  sql_text ora_name_list_t;
  n PLS_INTEGER;
  v_stmt VARCHAR2(2000);
BEGIN
--获取DDL语句
  n := ora_sql_txt(sql_text);
  FOR i IN 1..n LOOP
    v_stmt := v_stmt || sql_text(i);
  END LOOP;
--将DDL语句插入到记录DDL操作的表,这个表自己预先创建
  INSERT INTO event_table VALUES ('text of
    triggering statement: ' || v_stmt);
EXCEPTION
          WHEN OTHERS THEN
          NULL;
END TRG_DDL_LOGS;

这里的DDL可以换成具体的DDL事件,也可以使用DDL,这样让所有DDL事件生效。
另外这里可以再结合触发器的Event Attribute Functions和sys_context获取额外的DDL会话信息。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏