두번째 질문 해결 방법 입니다.
-- 1. 아래 쿼리를 실행 합니다. SELECT 'SELECT '''||TNAME||''' AS TNM, '''||CNAME||''' AS CNM, COUNT(*) CNT FROM '||TNAME||' WHERE '||CNAME||' IS NULL UNION ALL' FROM COL WHERE NULLS = 'NULL' --AND TNAME = 'TOAD_PLAN_TABLE' -- 테스트를 위해 테이블 하나만 넣어볼때 ; -- 2. 쿼리 실행 SELECT * FROM ( -- 위 1번에서 나온 쿼리를 복사해 넣습니다 -- 가장 아래줄에 UNION ALL을 삭제합니다. ) WHERE CNT > 0 ;
또다른 방법으로 예전에 마농님이 올려주신 쿼리를 참고 했서 만들어 봤습니다.
WITH t AS ( SELECT /*+ materialize */ tname, cname FROM col WHERE tname NOT LIKE 'BIN$%' ) SELECT tname, cname FROM t WHERE TO_NUMBER( dbms_xmlgen.getxmltype( 'SELECT COUNT(*) FROM "'||tname||'" WHERE "'||cname||'" IS NULL' ).Extract('//text()') ) > 0 ;
위 두 방법 모두 당연하겠지만 대용량 DB 인경우 DB에 무리를 줄 수 있습니다.