Oracle:在触发器内禁用约束

时间:2014-07-24 23:54:48

标签: sql oracle triggers

很抱歉有一个可能很愚蠢的问题,但为什么这句话:

ALTER TABLE SESSION_LOGGING disable CONSTRAINT fk_session_log_ben_name;
当作为普通的SQL命令执行时,

工作完全正常,就像预期一样 但是当放置在一个正确的工作TRIGGER(没有为session_logging表执行!)时,会导致触发器无法再编译?

希望有人能帮忙......

1 个答案:

答案 0 :(得分:0)

所有DDL语句(如CREATE / ALTER)在语句之前和之后发出隐式提交。我们不允许在触发器中发出commitrollback。所以DDL不能用于触发器。

根据这个Oracle Community Post,您可以执行类似下面的操作,在触发器中执行ALTER语句,但它根本不是推荐的,也是一种不好的做法。

declare
 pragma AUTONOMOUS_TRANSACTION;
begin
 execute immediate 'alter table SESSION_LOGGING ......';