2013-10-24 1 views
1

50/60 테이블이있는 시스템에서 작업하고 있습니다. 각 고유 키가 동일 함 (이 예제에서는 MEMBID이라고 함)데이터가있는 테이블 찾기

MEMBID이있는 행이 하나 이상있는 모든 테이블의 이름을 표시 할 수있는 쿼리가 있습니까?

또는 USER_TABLES 테이블을 통해 커서를 이동 한 다음 동적 쿼리를 작성하여 "배열"을 빌드해야합니까?

많은 감사

마이크

+0

이 방법이 유용할까요? select * from user_tables, user_constraints c 여기서 rownum> 0이고 c.CONSTRAINT_NAME = 'MEMBID' – Moudiz

+1

@Moudiz 이렇게하면 제약 조건이있는 모든 테이블의 목록이 제공되지만 테이블에 적어도 하나의 행에 null이 아닌 MEMBID가 있습니다. –

답변

1
내가 동적 SQL 가고 싶어

이 -이 매우 간단합니다 :

declare 
    l_cnt_membid number; 
    l_cnt_overall number; 
begin 
    for cur in (select table_name from user_tab_cols where column_name = 'MEMBID') 
    loop 
     execute immediate 'select count(*), count(membid) from ' || cur.table_name 
     into l_cnt_overall, l_cnt_membid; 
     dbms_output.put_line(cur.table_name || ', overall: ' || l_cnt_overall || 
     ', membid: ' || l_cnt_membid); 
    end loop; 
end; 

편집 :

테이블의 통계는

경우 - - 날짜 user_tab_cols에서 직접이 정보를 얻을 수 있습니다.

select table_name, 
    (case when num_distinct > 0 
    then 'YES' 
    else 'NO' end) has_nonnull_membid 
from user_tab_cols 
where column_name = 'MEMBID' 
관련 문제