Oracle SQL で作成した複数のテーブルの各制約の名前を定義しました。
問題は、特定のテーブルの列の制約を削除するには、各制約に指定した名前を知る必要があることですが、忘れてしまいました。
テーブルの各列に指定したすべての制約の名前を一覧表示するにはどうすればよいですか?
そうするためのSQL文はありますか?
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;
以下の 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';