128

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

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

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

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

4

7 に答える 7

179

テーブルの列と対応する制約を確認するには、データ ディクショナリ、特に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>'
于 2012-08-09T09:21:42.033 に答える
18
SELECT * FROM USER_CONSTRAINTS
于 2012-08-09T08:15:48.263 に答える
13

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

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

乾杯

于 2014-04-02T12:46:07.107 に答える
9
select constraint_name,constraint_type 
from user_constraints
where table_name = 'YOUR TABLE NAME';

注: テーブル名は大文字にする必要があります。

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

select constraint_name,constraint_type,table_name 
from user_constraints;
于 2014-01-07T11:46:42.487 に答える
1

以下の 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';
于 2018-10-02T22:13:48.370 に答える