oracle - ORA-31603 为约束生成 ddl 时
问题描述
我正在尝试为约束生成 ddl。查询的片段:
SELECT DBMS_METADATA.get_ddl ('CONSTRAINT', constraint_name, owner)
FROM all_constraints
WHERE owner = UPPER('THEOWNER')
AND constraint_type IN ('U', 'P', 'R');
但得到这个:
ORA-31603: object "EMPLOYEE_DEPNUM_FK" of type CONSTRAINT not found in schema "THEOWNER"
at "SYS.DBMS_METADATA", line 6069
ORA-06512: at "SYS.DBMS_METADATA", line 8666
ORA-06512: at line 1
以系统用户身份运行脚本。还尝试了脚本作为THEOWNER
:
SELECT DBMS_METADATA.get_ddl ('CONSTRAINT', 'EMPLOYEE_DEPNUM_FK') from dual;
同样的错误。我能够为表、索引、视图等生成 ddl,但有一些限制。
以下查询将 显示THEOWNER
为约束的所有者:
SELECT owner FROM all_constraints WHERE CONSTRAINT_NAME='EMPLOYEE_DEPNUM_FK';
我似乎无法找到DBMS_METADATA.GET_DDL
任何地方的源代码。有什么建议么?
解决方案
您可以使用:
SELECT DBMS_METADATA.get_ddl (CASE WHEN constraint_type = 'R' THEN 'REF_CONSTRAINT' ELSE 'CONSTRAINT' END, constraint_name, owner)
FROM all_constraints
...
因为 ref-constraints 有另一种类型描述。
推荐阅读
- asp.net-core - 未设置 HSTS
- xcode - 我的 2 个 UI 图像顶部的文本未显示在情节提要中
- angular - 防止 Chrome 扩展弹出窗口在关闭时重置
- react-native - Sendbird SDK 在 react native 中需要 fs 包
- c++ - 带参数列表的 C++ 构造函数
- php - 将 ORDER BY 添加到 SQL 查询的正确语法
- javascript - 很难理解最长回文算法
- javascript - ReferenceError: utea 没有定义?
- excel - 电子邮件表范围相同的地址
- qt - QListWidget 中的 setItemWidget 不起作用