为约束生成 ddl 时出现 ORA-31603

ORA-31603 when generating ddl for constraints

我正在尝试为约束生成 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
...

因为引用约束有另一种类型描述。