大家好,问一个问题,触发器里能不能有ddl

shipatrioc 2004-01-14 07:16:19
我现在碰到一个问题,就是当插入或者删除一个表里的一条记录时,另外一个表里的field要跟着改变,我想用触发器实现,结果出现错误,意思是触发器里不能有commit操作,我想可能是ddl自动commit才引起这问题,各位有没有碰见过这种情况,如果在触发器里不行,有没有更好的办法!我可不想在程序里操作 :)
...全文
50 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chanet 2004-01-15
  • 打赏
  • 举报
回复
楼上说的好 :)

触发器整体就是一个事务来的,由 Oracle 控制.
但设置了 PRAGMA AUTONOMOUS_TRANSACTION 之后,触发器的事务就是由自己控制,可以自由 rollback/commit/alter table... 等等之类的操作
leecooper0918 2004-01-14
  • 打赏
  • 举报
回复
触发器本身就带有事务,执行失败自动回滚

如果要在触发器中执行DDL操作,可以启用自治的事务.

CREATE TRIGGER bonus_trig
AFTER UPDATE ON bonus
DECLARE
-- enables trigger to perform DDL
PRAGMA AUTONOMOUS_TRANSACTION; BEGIN
EXECUTE IMMEDIATE ’DROP TABLE temp_bonus’;
END;
shipatrioc 2004-01-14
  • 打赏
  • 举报
回复
我知道,当修改一个表结构时,可以触发一个事件,去做其它的操作,就是DDL触发器!
但我现在的问题是,我在DML触发器里,要做DDL操作
solidpanther 2004-01-14
  • 打赏
  • 举报
回复
能,触发器里不用写commit

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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