[sql] 오라클은 제약 조건 찾기

라는 제약 조건이 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";


답변