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 |