
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) ;
결과값은 직접 돌려보시길...
'Blog > DB' 카테고리의 다른 글
| ORACLE에서 Long Type의 Column에 대한 Like 검색 Ver.2 (0) | 2023.12.08 | 
|---|---|
| SqlDeveloper에서 XMLTYPE 값 보기 (0) | 2019.01.08 | 
| 달력을 DB에 저장해서 사용해야 하는 할 필요가 있을 때 달력 생성 - MSSQL (0) | 2019.01.03 | 
| MSSQL , ORACLE 월(month)의 마지막날 구하기 함수 (0) | 2019.01.03 | 
| SSMS에서 Table Design 시 Comment(설명) 항목 보기 (0) | 2018.12.03 | 
