从USER_CONSTRAINTS选择CONSTRAINT_NAME时,Constraint名称无效

时间:2016-02-16 11:10:18

标签: oracle oracle10g ddl

我想得到所有的canstraint_name,所以我可以在java中生成ddl: 对于每个canstraint,我将执行:

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==$0

执行时会产生错误:

 DBMS_METADATA.GET_DDL('CONSTRAINT','pdpzZlEqTgUxb7qMBM8w==$0','hr')
  

无法在Schemas =' hr'中找到pdpzZlEqTgUxb7qMBM8w == $ 0 (错误是法语)

1 个答案:

答案 0 :(得分:1)

来自GET_DDL的错误消息表明这些约束属于已删除的表(尽管这些名称以.designers ul { overflow: hidden; list-style: none } .designers li { border: 1px solid grey; float: left; margin: 10px; box-shadow: 0 0 1px black; width: 250px; position: relative; } .designers img { vertical-align: middle; width: 70px; height: 70px; float:left; } .designers span { margin: 0 10px; font-size: 16px; font-family: Open Sans; font-weight: bold; text-align: center; position: relative; margin-left: 80px; display: block; line-height: 4.2em; } 开头)。您无法为这些检索DDL。如果你不想要它们,你可以做一个

BIN$

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子句。