首页 > 解决方案 > 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任何地方的源代码。有什么建议么?

标签: oracleddl

解决方案


您可以使用:

SELECT DBMS_METADATA.get_ddl (CASE WHEN constraint_type = 'R' THEN 'REF_CONSTRAINT' ELSE 'CONSTRAINT' END, constraint_name, owner)
FROM   all_constraints
...

因为 ref-constraints 有另一种类型描述。


推荐阅读