문서유형ㅣ기술정보
분야ㅣApp 개발
적용제품버전ㅣTibero6이상
문서번호ㅣTDETI016
개요
like를 사용하여 다수의 인자를 주고 싶을 때, like와 in를 함께 사용하는 방식은 문법에 어긋나고, AND, OR 등을 길게 쓰는 방식 대신 REGEXP_LIKE 함수를 사용하여 쿼리를 작성할 수 있습니다.
예시
select distinct a.table_name from dba_tables a, dba_tab_columns b
where a.table_name=b.table_name
and a.data_type like in ('%LONG%', '%LOB%') --문법에 어긋남
and a.owner='TEST'
order by 1 ;
방법
테스트 시나리오
예제 테이블 생성
SQL> desc TEST.BIG_TABLE
COLUMN_NAME TYPE CONSTRAINT
---------------------------------------- ------------------ --------------------
ID NUMBER PRIMARY KEY
NAME VARCHAR(100)
DESCRIPTION VARCHAR(4000)
CREATED_AT DATE
BIG_CLOB CLOB
INDEX_NAME TYPE COLUMN_NAME
-------------------------------- ------------------------ ----------------------
IDX_BIG_TABLE_NAME NORMAL NAME
_TEST_CON51900895 NORMAL ID
예제 쿼리와 동일한 내용으로 AND, LIKE, OR 등을 사용하여 쿼리 작성할 수 있습니다.
SQL> SELECT DISTINCT a.table_name
FROM dba_tables a
JOIN dba_tab_columns b
ON a.owner = b.owner
AND a.table_name = b.table_name
WHERE a.owner = 'TEST'
AND (b.data_type LIKE '%LONG%'
OR b.data_type LIKE '%LOB%')
ORDER BY 1;
TABLE_NAME
--------------------------------------------------------------------------------
BIG_TABLE
1 row selected.
REGEXP_LIKE 함수를 사용하여 쿼리를 작성할 수 있습니다.
SQL> select distinct a.table_name from dba_tables a, dba_tab_columns b
where a.table_name=b.table_name
and REGEXP_LIKE(b.data_type, 'LOB|LONG')
and a.owner='TEST'
order by 1 ;
TABLE_NAME
--------------------------------------------------------------------------------
BIG_TABLE
1 row selected.
REGEXP_LIKE를 사용하여 쿼리를 훨씬 간결하고 가독성 좋게 표현할 수 있습니다.