我有一个触发器,每次在我的表audit_ddl中插入新行时都会触发。 我只是在玩它,想向表添加唯一键。但是,我收到一条错误消息 请明确说明:表中还没有约束。我意识到不能两次创建相同的约束。这只是用于测试。 此外,我能够使用立即执行但唯一键提供错误,从而在表上创建主约束,外部约束。 此查询 当我在脚本中独立运行时,效果很好。 我认为我拥有所有特权: 我还尝试运行查询来创建视图和过程,结果我遇到了同样的错误。 答案 0 :(得分:3) 关于问题是什么,错误消息尚不清楚: 这错误地表明这是系统触发器-并非如此。系统触发器可以包含某些DDL语句(CREATE TABLE,ALTER TABLE,DROP TABLE和ALTER ... COMPILE),但是不允许诸如此类的非系统触发器执行DDL。 Manual reference here - search for "SQL Statements Allowed in Trigger Bodies",您会发现“非系统触发器主体不能包含DDL或事务控制语句。” 创建约束时,约束将保留在数据库中,直到将其删除。我建议您在SQL窗口或类似窗口中创建约束。CREATE OR REPLACE TRIGGER trg_after_insert_audit_ddl AFTER
INSERT ON audit_ddl
FOR EACH ROW
declare
ddl_qry VARCHAR2(4000);
BEGIN
ddl_qry := 'ALTER TABLE reese33 ADD CONSTRAINT reese33_uk2 unique(tut_name) enable';
EXECUTE IMMEDIATE ddl_qry;
END;
ORA-04088: error during execution of trigger 'DS.AUDIT_DDL_TRG'
ORA-00604: error occurred at recursive SQL level 1
ORA-30511: invalid DDL operation in system triggers
ORA-06512: at "SD.TRG_AFTER_INSERT_AUDIT_DDL", line 5
ORA-04088: error during execution of trigger 'SD.TRG_AFTER_INSERT_AUDIT_DDL'
ORA-06512: at line 16
ALTER TABLE reese33 ADD CONSTRAINT reese33_uk2 unique(tut_name) enable
1 个答案:
ORA-30511: invalid DDL operation in system triggers