web-dev-qa-db-ja.com

Oracle SQLの表に対するすべての制約の表示名

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

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

テーブルの各列に指定した制約の名前をすべてリストする方法を教えてください。

そのためのSQL文はありますか?

100
Jeris Alan

テーブルの列と対応する制約を見るには、 データディクショナリ 、特に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>'
140
Ollie
SELECT * FROM USER_CONSTRAINTS
12
Paciv

多分これは助けることができる:

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

乾杯

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

注:テーブル名は大文字でなければなりません。

テーブルの名前がわからない場合は、

select constraint_name,constraint_type,table_name 
from user_constraints;
7
kapil kumar

私に制約を返した唯一のもの:

SELECT * FROM ALL_CONSTRAINTS WHERE table_name = 'YOUR TABLE NAME' ;

Oracleドキュメント から選択

0
Gweltaz Niquel

以下の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';
0
Raymond Wachaga