我想得到所有的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 (错误是法语)
答案 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
子句。