1
50/60 테이블이있는 시스템에서 작업하고 있습니다. 각 고유 키가 동일 함 (이 예제에서는 MEMBID
이라고 함)데이터가있는 테이블 찾기
MEMBID
이있는 행이 하나 이상있는 모든 테이블의 이름을 표시 할 수있는 쿼리가 있습니까?
또는 USER_TABLES
테이블을 통해 커서를 이동 한 다음 동적 쿼리를 작성하여 "배열"을 빌드해야합니까?
많은 감사
마이크
50/60 테이블이있는 시스템에서 작업하고 있습니다. 각 고유 키가 동일 함 (이 예제에서는 MEMBID
이라고 함)데이터가있는 테이블 찾기
MEMBID
이있는 행이 하나 이상있는 모든 테이블의 이름을 표시 할 수있는 쿼리가 있습니까?
또는 USER_TABLES
테이블을 통해 커서를 이동 한 다음 동적 쿼리를 작성하여 "배열"을 빌드해야합니까?
많은 감사
마이크
이 -이 매우 간단합니다 :
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'
이 방법이 유용할까요? select * from user_tables, user_constraints c 여기서 rownum> 0이고 c.CONSTRAINT_NAME = 'MEMBID' – Moudiz
@Moudiz 이렇게하면 제약 조건이있는 모든 테이블의 목록이 제공되지만 테이블에 적어도 하나의 행에 null이 아닌 MEMBID가 있습니다. –