我希望看到在表的同义词中定义的约束。
当一个类型
SQL> DESCRIBE table_name;
它只显示每列的编号,非空标志和大小。我如何知道每列的所有约束?我怎么能知道同义词是公共的还是私人的?
谢谢, 阿尔瓦罗。
解
随着@Aramillo帮助并使其适应我的需求,我想出了如何做到这一点。我希望看到为表定义的约束,但不是根据USER定义的约束。有两个选项,ALL_CONSTRAINTS和ALL_CONS_COLUMNS。
ALL_CONSTRAINTS
没有列COLUMN_NAME,以便知道约束设置为的列名称。 [ALL_CONS_COLUMNS]
有。{/ p>
查询:
SELECT * FROM all_cons_columns WHERE table_name = 'table_name';
关于私人或公共同义词,如上面的链接所示,
ALL_CONSTRAINTS / ALL_CONS_COLUMNS描述了当前用户可访问的表的约束定义。
所以我猜如果它显示数据同义词是公共的,或者你是私人同义词的正确用户。
答案 0 :(得分:2)
此查询为您提供当前用户名称为REGION_SYN_P
的同义词的所有约束:
SELECT constraint_name,
c.table_name,
synonym_name,
S.OWNER
FROM user_constraints C, all_SYNONYMS S
WHERE C.TABLE_NAME = S.TABLE_NAME
AND S.TABLE_OWNER = C.OWNER
AND S.Synonym_name = 'REGION_SYN_P'
如果您想知道是否公开,则只需检查所有者列,如果它是公开同义词,则所有者将为PUBLIC
。
如果需要查询其他模式中的约束,可以使用all_constraints
代替user_constraints
。
我希望这有帮助。
答案 1 :(得分:0)
以下内容适用于Oracle。 查询所谓的静态数据字典: oracle constrains
用它来解决 DBA_CONSTRAINTS USER_CONSTRAINTS 要么 DBA_CONS_COLUMNS USER_CONS_COLUMNS