如何在oracle ddl触发器中执行ddl语句

caibird1024 2011-10-21 04:41:02
rt
...全文
266 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsplx1111 2011-10-21
  • 打赏
  • 举报
回复
触发器不支持DDL和对事务commit,rollback的操作

如果非要在触发器中实现以上功能,要做成自制事物

比如:
create or replace trigger tr_aud_t2 after update on t2
declare
PRAGMA autonomous_transaction; --定义成自制事务后,变成独立事务,就可以commit了
begin
insert into aud_tmp values(sysdate,'update',sys_context('USERENV','CURRENT_USER'));
commit; --此处就是独立事务了,想记录就记录不管外头update成功与否
end;
SQL> /

SQL> select ename,sal from t2 where empno=7788;

ENAME SAL
---------- ----------
SCOTT 102


SQL> select * from aud_tmp; --当成一个独立的事务插入的,所以可以查出来

EXEC_TIME EXEC_TYPE EXEC_USER
------------------- ---------- --------------------
2011-03-11 05:39:32 update SCOTT
caibird1024 2011-10-21
  • 打赏
  • 举报
回复
有ddl触发器,是针对schema或database的
「已注销」 2011-10-21
  • 打赏
  • 举报
回复
触发器只能针对update,delete,insert吧,没有ddl触发器。

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧