안녕하세요 dba_tab_cols 쿼리를 사용하여 기본 키와 고유 키를 검색 할 수 있습니까?Oracle dba_tab_cols query
다음 필드를 모두 검색 할 수있는 쿼리가 있습니까?
- 열 이름
- 데이터 형식
- 기본 키
- 널/NOT NULL
- 고유 키
- 기본값
- 추가
안녕하세요 dba_tab_cols 쿼리를 사용하여 기본 키와 고유 키를 검색 할 수 있습니까?Oracle dba_tab_cols query
다음 필드를 모두 검색 할 수있는 쿼리가 있습니까?
기본 및 고유 키 하나 이상의 c에 걸쳐있을 수있다. olumn, 그래서 그들은 dba_tab_columns
에 속하지 않을 것입니다. 해당 정보를 얻으려면 dba_constraints
및 dba_cons_columns
을 확인해야합니다.
이
어쩌면, 출발점입니다 :select owner, table_name, column_name, data_type, primary_key,
nullable, unique_key, data_default
from (
select dtc.owner, dtc.table_name, dtc.column_id, dtc.column_name,
dtc.data_type, dtc.nullable, dtc.data_default,
case when dc.constraint_type = 'P' and dcc.column_name = dtc.column_name
then dc.constraint_name end as primary_key,
case when dc.constraint_type = 'U' and dcc.column_name = dtc.column_name
then dc.constraint_name end as unique_key,
row_number() over (partition by dtc.owner, dtc.table_name, dtc.column_id
order by null) as rn
from dba_tab_columns dtc
left join dba_constraints dc
on dc.owner = dtc.owner
and dc.table_name = dtc.table_name
and dc.constraint_type in ('P', 'U')
left join dba_cons_columns dcc
on dcc.owner = dc.owner
and dcc.constraint_name = dc.constraint_name
and dcc.table_name = dc.table_name
and dcc.column_name = dtc.column_name
where dtc.owner = '<owner>'
and dtc.table_name = '<table_name>'
)
where rn = 1
order by owner, table_name, column_id;
난 당신이 하나 개 이상의 제약 조건이있는 테이블에 대한 중복을 얻을 것 때문에 row_number
값을 생성하는 하위 쿼리와 함께이 일을했습니다; 기본값 인 long
(열 data_default
)을 원하므로 distinct
또는 group by
을 사용할 수 없습니다. 조금은 기분이 좋지 않지만, 당신이 필요로하는 것을 얻기 위해 그것을 할 수 있다고 확신합니다.
not null
버전을 복제하는 체크 제약 조건을 설정할 수도 있습니다 (권장하지는 않지만). 고유 색인은 고유 제한으로 표시되지 않으므로 dba_indexes
및 dba_ind_columns
을 통해 그 중 하나를 찾고 싶을 수도 있습니다. 그러나 고유 제한을 백업하는 데 사용되는 색인은 둘 다에 표시됩니다.
당신이하려는 의도에 따라이 정보를 얻으려면 dbms_metadata.get_ddl
을 볼 수도 있습니다. 왜 다른 곳에서 스키마를 다시 만들려고하는 것이 아닌 다른 곳에서 유용하게 사용할 수 있을지 모르겠지만 더 나은 도구가 있습니다.