XX아~ 열심히 하지마~. 잘하란 말야~

ORACLE에서 LONG TYPE의 COLUMN에 LIKE 조건을 걸기 위해서.. LONG TO CHAR 본문

Blog/DB

ORACLE에서 LONG TYPE의 COLUMN에 LIKE 조건을 걸기 위해서.. LONG TO CHAR

IamwhatIam 2019. 1. 8. 13:25

ORACLE에서 테이블 정보를 조회하기 위한 QUERY를 짜다가 COLUMN DEFAULT 값의 COLUMN이 LONG TYPE이라서

조건절에 LIKE를 쓸 수 없는 상황이 발생했다.

ORACLE에서는 LONG TYPE을 TO_CAHR 함수로 변경이 안된다.

그럼 우짜노~!!! 이가 없으면 잇몸으로~!!!

DEFAULT 값에 SYSDATE가 있는 TABLE을 예로 들어서 설명한 것이다. 참고하시길~


SELECT  TMP.OWNER

     ,  TMP.TABLE_NAME

     ,  TMP.COLUMN_NAME

     ,  TMP.DATA_TYPE

     ,  TMP.DATA_LENGTH

     ,  TMP.DATA_PRECISION

     ,  TMP.DATA_SCALE

     ,  TMP.DATA_DEFAULT

     ,  TMP.DATA_DEFAULT_CHAR

     ,  TMP.COLUMN_ID

  FROM  (

    SELECT  OWNER

         ,  TABLE_NAME

         ,  COLUMN_NAME

         ,  DATA_TYPE

         ,  DATA_LENGTH

         ,  DATA_PRECISION

         ,  DATA_SCALE

         ,  DATA_DEFAULT

         ,  EXTRACTVALUE ( DBMS_XMLGEN.GETXMLTYPE('SELECT DATA_DEFAULT FROM USER_TAB_COLUMNS WHERE TABLE_NAME = ''' || TABLE_NAME || ''' AND COLUMN_NAME = ''' || COLUMN_NAME || '''' ), '//text()' ) AS DATA_DEFAULT_CHAR

         ,  COLUMN_ID

      FROM  DBA_TAB_COLUMNS

     WHERE  1=1

       AND  TABLE_NAME = '테스트테이블명'

        ) TMP

 WHERE  TMP.DATA_DEFAULT_CHAR LIKE 'SYS%'

ORDER BY TMP.COLUMN_ID


위에서 보는 것과 같이  DBMS_XMLGEN.GETXMLTYPE 을 써서 XML 형태로 변환하고 그걸 다시금 TAG를 없애면 된다.

DBMS_XMLGEN.GETXMLTYPE 의 이해를 돕기 위해서 아래의 QUERY는 문자열로 된 수식을 수식 자체로 변환하는

예제이다.

SELECT  X

         ,  TO_NUMBER( DBMS_XMLGEN.GETXMLTYPE( 'SELECT ' || X || ' FROM DUAL' ).Extract('//text()') ) Y

      FROM  (SELECT '8*5/4' X FROM DUAL) ;


결과값은 직접 돌려보시길...