从 USER_CONSTRAINTS 中选择 CONSTRAINT_NAME 时约束名称无效
Invalid Constraint name when selecting CONSTRAINT_NAME from USER_CONSTRAINTS
我想获取所有 canstraint_name,这样我就可以在 java 中生成 ddl:
对于每个 canstraint_name 我要执行:
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'CONSTRAINTS',true);
DBMS_METADATA.GET_DDL('CONSTRAINT','Constraint_name','hr');
我试图执行这条语句:
selectSQL = "SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE OWNER='" +Schemas+ "'";
我得到一长串约束,包括无效的约束,例如:pdpzZlEqTgUxb7qMBM8w==[=15=]
执行时产生错误:
DBMS_METADATA.GET_DDL('CONSTRAINT','pdpzZlEqTgUxb7qMBM8w==[=14=]','hr')
can't find pdpzZlEqTgUxb7qMBM8w==[=16=] in Schemas='hr' (the error it's in French)
来自 GET_DDL 的错误消息表明这些约束属于删除的表(尽管这些名称以 BIN$
开头)。您无法检索这些的 DDL。如果你不想要它们,你可以做一个
purge recyclebin;
在从 user_constraints
检索约束之前。
或者在检索约束列表时排除它们:
SELECT constraint_name
FROM user_constraints
WHERE constraint_name NOT LIKE 'BIN$%';
这个查询:
SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE OWNER='" +Schemas+ "'";
确实没有意义。 USER_CONSTRAINTS
将只列出当前用户拥有的约束。使用 USER_CONSTRAINTS
时,您永远不会从不同的模式中获得约束。
如果你想从不同的模式中获取约束,你需要使用ALL_CONSTRAINTS
。
如果您确实需要当前用户的约束,您可以安全地删除 WHERE
子句。
我想获取所有 canstraint_name,这样我就可以在 java 中生成 ddl: 对于每个 canstraint_name 我要执行:
DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'CONSTRAINTS',true);
DBMS_METADATA.GET_DDL('CONSTRAINT','Constraint_name','hr');
我试图执行这条语句:
selectSQL = "SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE OWNER='" +Schemas+ "'";
我得到一长串约束,包括无效的约束,例如:pdpzZlEqTgUxb7qMBM8w==[=15=]
执行时产生错误:
DBMS_METADATA.GET_DDL('CONSTRAINT','pdpzZlEqTgUxb7qMBM8w==[=14=]','hr')
can't find pdpzZlEqTgUxb7qMBM8w==[=16=] in Schemas='hr' (the error it's in French)
来自 GET_DDL 的错误消息表明这些约束属于删除的表(尽管这些名称以 BIN$
开头)。您无法检索这些的 DDL。如果你不想要它们,你可以做一个
purge recyclebin;
在从 user_constraints
检索约束之前。
或者在检索约束列表时排除它们:
SELECT constraint_name
FROM user_constraints
WHERE constraint_name NOT LIKE 'BIN$%';
这个查询:
SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE OWNER='" +Schemas+ "'";
确实没有意义。 USER_CONSTRAINTS
将只列出当前用户拥有的约束。使用 USER_CONSTRAINTS
时,您永远不会从不同的模式中获得约束。
如果你想从不同的模式中获取约束,你需要使用ALL_CONSTRAINTS
。
如果您确实需要当前用户的约束,您可以安全地删除 WHERE
子句。