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

Jer*_*lan 106 sql oracle constraints oracle11g

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

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

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

这样做有什么SQL语句吗?

Oll*_*lie 147

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

SELECT *
  FROM user_cons_columns
 WHERE table_name = '<your table name>';
Run Code Online (Sandbox Code Playgroud)

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

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

SELECT *
  FROM user_constraints
 WHERE table_name = '<your table name>'
   AND constraint_name = '<your constraint name>';
Run Code Online (Sandbox Code Playgroud)

如果表保存在非默认架构的架构中,则可能需要将视图替换为:

all_cons_columns
Run Code Online (Sandbox Code Playgroud)

all_constraints
Run Code Online (Sandbox Code Playgroud)

添加到where子句:

   AND owner = '<schema owner of the table>'
Run Code Online (Sandbox Code Playgroud)

  • 我认为<你的桌名>是区分大小写的; 它应该是大写的. (3认同)

Pac*_*civ 12

SELECT * FROM USER_CONSTRAINTS
Run Code Online (Sandbox Code Playgroud)

  • 这不会得到列名 (2认同)

Van*_*ogh 8

也许这可以帮助:

SELECT constraint_name, constraint_type, column_name
from user_constraints natural join user_cons_columns
where table_name = "my_table_name";
Run Code Online (Sandbox Code Playgroud)

干杯


小智 7

select constraint_name,constraint_type 
from user_constraints
where table_name = 'YOUR TABLE NAME';
Run Code Online (Sandbox Code Playgroud)

注意:表名应该是大写的.

如果您不知道表的名称,那么,

select constraint_name,constraint_type,table_name 
from user_constraints;
Run Code Online (Sandbox Code Playgroud)


Gwe*_*uel 6

企业数据库通常有多个用户,而我并没有选择正确的用户:

SELECT * FROM ALL_CONSTRAINTS WHERE table_name = 'YOUR TABLE NAME' ;
Run Code Online (Sandbox Code Playgroud)

摘自Oracle 文档