2009-08-24 3 views
2

사용자 테이블 이름을 기본 키 이름으로 두 번째 열로 어떻게 나열 할 수 있습니까?테이블의 기본 키 이름 가져 오기

나는 절반의 일을하고 있지만 더 할 일이 무엇인지 알지 못합니다.

select table_name from user_tables ORDER BY (table_name) ASC 

어떻게 알 수 있습니까?

+0

을 사용할 수 있습니다) 당신이 "사용자 테이블 이름"무엇을 의미합니까, 그냥 나 자신을 할 수있는 시간이 없어? – rogeriopvl

+0

특정 사용자가 작성한 테이블의 이름입니다 (Oracle 사용자와 스키마를 생성하기 위해 Oracle과 함께 작업하고 있습니다). – Sheldon

답변

3

이 간단한 쿼리는 PK 제약 조건 이름 (그러나 열 이름)와 함께 당신에게 테이블의 목록을 제공합니다! 우리는 때문에 수집() 집계 함수의 첫번째 유틸리티 유형을 작성해야합니다

create type ty_varchar_nt as table of varchar2(4000); 

select  ut.table_name, uc.constraint_name, cast(collect (uic.column_name) as ty_varchar_nt) as pk_cols 
from  user_tables ut 
left join user_constraints uc 
    on  ut.table_name = uc.table_name 
    and  uc.constraint_type = 'P' 
left join user_ind_columns uic 
    on  uc.index_name = uic.index_name 
group by ut.table_name, uc.constraint_name; 

당신이 중첩 된 탭의 서식을 좋아하지 않는 경우에, 당신은 입력으로 NT 걸릴 것 유틸리티 기능을 쓸 수 있습니다 쉼표로 구분 된 연결 문자열을 출력으로 제공합니다.

1

시도에 합류 USER_TABLES와 USER_CONSTRAINTS 주셔서 감사합니다.

에서 USER_CONSTRAINTS 필터은 'P'(기본 키)에 동일 CONSTRAINT_TYPE 모든 행. 여기서 index_nameindex_owner 값을 USER_INDEXES과 결합 할 수 있으며 PRIMARY KEY에서 열 이름을 가져옵니다.

나는이 일을하는 더 쉬운 방법을 알고 싶다 ...하지만 나는 그렇지 않다.

행운을 빈다. 당신이 열 이름을 원하는 경우

select  ut.table_name, uc.constraint_name 
from  user_tables ut 
left join user_constraints uc 
    on  ut.table_name = uc.table_name 
    and  uc.constraint_type = 'P'; 

가하는 PK가 여러 열을 가질 수 있음을 기억

1

는 다음과 같은 쿼리

SELECT cols.table_name, cols.column_name, cols.position, cons.status, cons.owner 
FROM all_constraints cons, all_cons_columns cols 
WHERE cons.constraint_type = 'P' 
AND cons.constraint_name = cols.constraint_name 
AND cons.owner = cols.owner 
ORDER BY cols.table_name, cols.position; 
관련 문제