Oracleは制約を見つける


166

という制約がありますusers.SYS_C00381400。どうすればその制約を見つけることができますか?すべての制約を照会する方法はありますか?


制約を知る方法は?users.SYS_C00381400
Vinay

制約名がエラーメッセージに表示されました。
David Oneill 2017

回答:


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

すべてのデータディクショナリビューと同様に、現在のスキーマと管理ユーザーのDBA_CONSTRAINTSビューのみを確認する場合は、USER_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'用、プライマリ用。

一般に、関係制約に明示的な名前を付けることをお勧めします。たとえば、データベースが主キーのインデックスを作成する場合(その列にまだインデックスが作成されていない場合に行われます)、制約名oo nameを使用します。のように名前が付けられたインデックスでいっぱいのデータベースは必要ありませんSYS_C00935191

正直なところ、ほとんどの人はNOT NULL制約に名前を付ける必要はありません。


25

より詳細な説明(どのテーブル/列がどのテーブル/列を参照するか)を取得するには、次のクエリを実行します。

SELECT   uc.constraint_name||CHR(10)
   ||      '('||ucc1.TABLE_NAME||'.'||ucc1.column_name||')' constraint_source
   ,       'REFERENCES'||CHR(10)
   ||      '('||ucc2.TABLE_NAME||'.'||ucc2.column_name||')' references_column
FROM user_constraints uc ,
  user_cons_columns ucc1 ,
  user_cons_columns ucc2
WHERE uc.constraint_name = ucc1.constraint_name
AND uc.r_constraint_name = ucc2.constraint_name
AND ucc1.POSITION        = ucc2.POSITION -- Correction for multiple column primary keys.
AND uc.constraint_type   = 'R'
AND uc.constraint_name   = 'SYS_C00381400'
ORDER BY ucc1.TABLE_NAME ,
  uc.constraint_name;

ここから。


6

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

SELECT constraint_name, constraint_type, column_name
from user_constraints natural join user_cons_columns
where table_name = "my_table_name";
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.