为约束生成 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
...
因为引用约束有另一种类型描述。
我正在尝试为约束生成 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
...
因为引用约束有另一种类型描述。