Oracle SQLのテーブルのすべての制約の名前を表示する


115

Oracle SQLで作成した複数のテーブルの各制約に名前を定義しました。

問題は、特定のテーブルの列の制約を削除するために、私が忘れていた各制約に指定した名前を知る必要があることです。

テーブルの各列に指定した制約の名前をすべてリストするにはどうすればよいですか?

そのためのSQLステートメントはありますか?

回答:


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
<テーブル名>は大文字と小文字が区別されると思います。大文字にする必要があります。
Kanagavelu Sugumar 2013

owner(user | all | dba)_constraintsと(user | all | dba)_cons_columnsの両方のフィールドは、制約の所有者であり、テーブルの所有者ではありません(Oracleドキュメントによる)。テーブルの所有者は、これらのいずれのビューでも使用可能なフィールドではありません。これは、制約の所有者とテーブルの所有者が同じである必要があることを意味しますか?
デビッドフレッチャー


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

以下の2つのコマンドのいずれかを使用します。すべて大文字でなければなりません。テーブル名は引用符で囲む必要があります。

--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';
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.