users.SYS_C00381400
という制約があります。その制約とは何ですか?すべての制約を照会する方法はありますか?
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'
。
一般に、関係制約に明示的な名前を付けるのは良い考えです。たとえば、データベースが主キーのインデックスを作成する場合(その列にまだインデックスが作成されていない場合に実行します)、インデックスの名前に制約名を使用します。 SYS_C00935191
のような名前のインデックスでいっぱいのデータベースは必要ありません。
ほとんどの人は、NOT NULL制約の命名を気にしません。
より詳細な説明(どのテーブル/列がどのテーブル/列を参照するか)を取得するには、次のクエリを実行できます。
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;
ここ から。
多分これは助けになるでしょう。
SELECT constraint_name, constraint_type, column_name
from user_constraints natural join user_cons_columns
where table_name = "my_table_name";