很抱歉有一个可能很愚蠢的问题,但为什么这句话:
ALTER TABLE SESSION_LOGGING disable CONSTRAINT fk_session_log_ben_name;
当作为普通的SQL命令执行时,工作完全正常,就像预期一样 但是当放置在一个正确的工作TRIGGER(没有为session_logging表执行!)时,会导致触发器无法再编译?
希望有人能帮忙......
答案 0 :(得分:0)
所有DDL语句(如CREATE
/ ALTER
)在语句之前和之后发出隐式提交。我们不允许在触发器中发出commit
或rollback
。所以DDL不能用于触发器。
根据这个Oracle Community Post,您可以执行类似下面的操作,在触发器中执行ALTER
语句,但它根本不是推荐的,也是一种不好的做法。
declare
pragma AUTONOMOUS_TRANSACTION;
begin
execute immediate 'alter table SESSION_LOGGING ......';