4Manuals

  • PDF Cloud HOME

无法从Oracle中立即执行创建唯一密钥 Download

    如果连接断开或超时或服务器关闭,是否选择更新锁定释放? Oracle 12c全文索引维护 oracle过程创建并运行ora-00900错误 如何通过Oracle Table知道应用程序名称 查询以从表中选择具有特定列值的记录 将数据从Kafka导出到Oracle 加载数据需要花费很多时间 缓存中的Oracle Reports Service文件名(Desname) REGEXP_SUBSTR Oracle |提取两个定界符之间的字符串 Oracle 19c无法创建主密钥

我有一个触发器,每次在我的表audit_ddl中插入新行时都会触发。

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

当我在脚本中独立运行时,效果很好。

我认为我拥有所有特权:

enter image description here

我还尝试运行查询来创建视图和过程,结果我遇到了同样的错误。

1 个答案:

答案 0 :(得分:3)

关于问题是什么,错误消息尚不清楚:

ORA-30511: invalid DDL operation in system triggers

这错误地表明这是系统触发器-并非如此。系统触发器可以包含某些DDL语句(CREATE TABLE,ALTER TABLE,DROP TABLE和ALTER ... COMPILE),但是不允许诸如此类的非系统触发器执行DDL。 Manual reference here - search for "SQL Statements Allowed in Trigger Bodies",您会发现“非系统触发器主体不能包含DDL或事务控制语句。”

创建约束时,约束将保留在数据库中,直到将其删除。我建议您在SQL窗口或类似窗口中创建约束。



Similar searches
    iOS面部识别持续学习 如何在目录中存储抓取的图像? Firebase Cloud Function中的“ ReferenceError:请求未定义” 如何使用浮点值动态创建矩形? 如何过滤包含键和值的数组