마농님! 감사합니다. ^^
재 문의 드려요~
알려주신데로 실행하니... 다시 오류가 납니다.^^
PURGE RECYCLEBIN; 실행 했구요~~~~
-- 문자타입 컬럼중 검색어(특정문자열)가 저장되어 있는 테이블, 컬럼 찾기 --
SELECT tname, cname
FROM col
WHERE coltype LIKE '%CHAR%' -- CHAR 타입 관련만 하도록 했는데~
AND tname NOT LIKE 'BIN$%' -- 요부분 추가
AND TO_NUMBER(
dbms_xmlgen.getxmltype(
'SELECT 1 FROM '||tname||' WHERE '||cname||' LIKE ''%검색어%'' AND ROWNUM = 1'
).Extract('//text()')
) = 1
;
-- 오류결과
ORA-19202: XML 처리
ORA-00932: 일관성 없는 데이터 유형: NUMBER이(가) 필요하지만 BLOB임 중 오류가 발생했습니다.
ORA-06512: "SYS.DBMS_XMLGEN", 288행
ORA-06512: 1행
BLOB TYPE이 있으면 오류가 나는 걸까요??
WITH t AS ( SELECT /*+ materialize */ tname, cname FROM col WHERE tname NOT LIKE 'BIN$%' AND coltype LIKE '%CHAR%' ) SELECT tname, cname FROM t WHERE TO_NUMBER( dbms_xmlgen.getxmltype( 'SELECT 1 FROM "'||tname||'" WHERE "'||cname||'" LIKE ''%검색어%'' AND ROWNUM = 1' ).Extract('//text()') ) = 1 ; 1. 우선 char 만 걸러서 처리하고자 했으나... - 조건절의 처리순서가 꼭 그렇게만 된다고 보장할 수 없네요. - WHERE tname NOT LIKE 'BIN$%' AND coltype LIKE '%CHAR%' - 이 조건들이 우선 처리되도록 /*+ materialize */ 힌트를 이용하면 됩니다. 2. 테이블명이 대문자만 있으리란 법은 없을 듯... - 테이블명과 컬럼명을 따옴표로 감싸도록 수정
ordered_predicates 힌트를 통해 조건절 처리순서 제어가 가능하다고 합니다.
SELECT /*+ordered_predicates*/ TNAME, CNAME FROM COL WHERE TNAME NOT LIKE 'BIN$%' AND COLTYPE LIKE '%CHAR%' AND TO_NUMBER( DBMS_XMLGEN.GETXMLTYPE( 'SELECT 1 FROM '||TNAME||' WHERE '||CNAME||' LIKE ''%검색어%'' AND ROWNUM = 1' ).EXTRACT('//text()') ) = 1