Oracle SQLで作成した複数の表の各制約に名前を定義しました。
問題は、特定のテーブルの列に対する制約を削除するために、私が忘れていた各制約に対して与えた名前を知る必要があるということです。
テーブルの各列に指定した制約の名前をすべてリストする方法を教えてください。
そのためのSQL文はありますか?
テーブルの列と対応する制約を見るには、 データディクショナリ 、特に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>'
SELECT * FROM USER_CONSTRAINTS
多分これは助けることができる:
SELECT constraint_name, constraint_type, column_name
from user_constraints natural join user_cons_columns
where table_name = "my_table_name";
乾杯
select constraint_name,constraint_type
from user_constraints
where table_name = 'YOUR TABLE NAME';
注:テーブル名は大文字でなければなりません。
テーブルの名前がわからない場合は、
select constraint_name,constraint_type,table_name
from user_constraints;
私に制約を返した唯一のもの:
SELECT * FROM ALL_CONSTRAINTS WHERE table_name = 'YOUR TABLE NAME' ;
Oracleドキュメント から選択
以下の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';