显示Oracle SQL中表的所有约束的名称


115

我为在Oracle SQL中创建的多个表的每个约束定义了一个名称。

问题是要为特定表的列删除约束,我需要知道为每个约束提供的名称,而我忘记了。

如何列出为表的每一列指定的所有约束名称?

有没有这样做的SQL语句?

Answers:


160

您需要查询数据字典,特别是USER_CONS_COLUMNS视图以查看表列和相应的约束:

SELECT *
  FROM user_cons_columns
 WHERE table_name = '<your table name>';

仅供参考,除非您专门使用小写名称(使用双引号)创建表,否则表名将默认为大写,因此请确保在查询中也是如此。

如果然后您希望查看有关约束本身的更多信息,请查询USER_CONSTRAINTS视图:

SELECT *
  FROM user_constraints
 WHERE table_name = '<your table name>'
   AND constraint_name = '<your constraint name>';

如果表保存在不是您的默认架构的架构中,那么您可能需要将视图替换为:

all_cons_columns

all_constraints

添加到where子句:

   AND owner = '<schema owner of the table>'

错字:USER_CONS_COLUMNS
Paul Draper

3
我认为<您的表名>区分大小写;它应该是大写的。
卡纳加维卢·苏古玛

owner在这两个领域(用户|全部| DBA)_constraints和(用户|全部| DBA)_cons_columns是约束的所有者,而不是表的所有者(每Oracle文档)。在这两个视图中,表所有者都不是可用字段。这是否意味着约束所有者和表所有者必须相同?
David Fletcher


11

也许这可以帮助:

SELECT constraint_name, constraint_type, column_name
from user_constraints natural join user_cons_columns
where table_name = "my_table_name";

干杯


8
select constraint_name,constraint_type 
from user_constraints
where table_name = 'YOUR TABLE NAME';

注意:表格名称应大写。

如果您不知道表格名称,

select constraint_name,constraint_type,table_name 
from user_constraints;


0

使用以下两个命令之一。一切都必须大写。表名必须用引号引起来:

--SEE THE CONSTRAINTS ON A TABLE
SELECT COLUMN_NAME, CONSTRAINT_NAME FROM USER_CONS_COLUMNS WHERE TABLE_NAME = 'TBL_CUSTOMER';

--OR FOR LESS DETAIL
SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'TBL_CUSTOMER';
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.