回答:
データディクショナリ、特に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>'
owner
(user | all | dba)_constraintsと(user | all | dba)_cons_columnsの両方のフィールドは、制約の所有者であり、テーブルの所有者ではありません(Oracleドキュメントによる)。テーブルの所有者は、これらのいずれのビューでも使用可能なフィールドではありません。これは、制約の所有者とテーブルの所有者が同じである必要があることを意味しますか?
多くの場合、エンタープライズデータベースには複数のユーザーがいますが、私は離れた場所にいるわけではありません。
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';
USER_CONS_COLUMNS