1. ホーム
  2. sql

[解決済み] オラクルは制約を見つける

2022-04-22 18:38:46

質問

という制約があります。 users.SYS_C00381400 . その制約が何であるかを調べるにはどうしたらよいですか? すべての制約をクエリする方法はありますか?

どのように解決するのですか?

select * from all_constraints
where owner = '<NAME>'
and constraint_name = 'SYS_C00381400'
/

他のデータディクショナリビューと同様に、現在のスキーマを確認したい場合はUSER_CONSTRAINTSビューを、管理者ユーザーにはDBA_CONSTRAINTSビューを提供します。

制約名の構成は、システムが生成した制約名を示しています。 例えば、テーブル宣言でNOT NULLを指定した場合。 あるいは実際に主キーやユニークキーを指定した場合。 例えば

SQL> create table t23 (id number not null primary key)
  2  /

Table created.

SQL> select constraint_name, constraint_type
  2  from user_constraints
  3  where table_name = 'T23'
  4  /

CONSTRAINT_NAME                C
------------------------------ -
SYS_C00935190                  C
SYS_C00935191                  P

SQL>

'C' をチェックする。 'P' はプライマリです。

一般に、リレーショナル制約には明示的な名前を付けるとよいでしょう。 例えば、データベースが主キーのインデックスを作成する場合(そのカラムがまだインデックスされていない場合は作成されます)、制約名oをインデックス名に使用します。 データベースが以下のような名前のインデックスでいっぱいになることは避けなければなりません。 SYS_C00935191 .

正直なところ、ほとんどの人はNOT NULL制約をわざわざ命名することはないでしょう。