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

 

  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) ;

 

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