문서유형ㅣ기술정보
분야ㅣ관리/환경설정
적용제품버전ㅣTibero5, Tibero6, Tibero7
문서번호ㅣTADTI152
개요
방법
1. PSM의 Source 조회 뷰
- dba_source
- user_source
- all_source
| Version | TEXT Column type |
| Tibero6 이상 | VARCHAR |
| Tibero5 이하 | LONG |
2. 테스트
2.1 Tibero6 이상
- 뷰 정보
SQL> desc dba_source COLUMN_NAME TYPE CONSTRAINT ---------------------------------------- ------------------ -------------------- OWNER VARCHAR(128) NAME VARCHAR(128) TYPE VARCHAR(12) LINE NUMBER TEXT VARCHAR(4000)
- text 컬럼 조회
SQL> SELECT * FROM dba_source WHERE text LIKE '%SELECT%'; OWNER NAME TYPE LINE TEXT ---------- ---------- ------------ ---------- ------------------------------------------------------------ SYS DBMS_FGA PACKAGE 56 statement_types IN VARCHAR2 DEFAULT 'SELECT', SYS HTF PACKAGE 249 function FORMSELECTOPEN(CNAME in varchar2, SYS HTF PACKAGE 253 function FORMSELECTOPTION(CVALUE in varchar2, SYS HTF PACKAGE 254 CSELECTED in varchar2 default ...(생략)...
정상 조회 되는 것을 확인할 수 있습니다.
2.1 Tibero5 이하
- 뷰 정보
SQL> desc dba_source COLUMN_NAME TYPE CONSTRAINT ---------------------------------------- ------------------ -------------------- OWNER VARCHAR(128) NAME VARCHAR(128) TYPE VARCHAR(12) TEXT LONG
- text 컬럼 조회
SQL> SELECT * FROM dba_source WHERE text LIKE '%SELECT%';
TBR-8063: LONG columns are not permitted.
at line 1, column 33:
SELECT * FROM dba_source WHERE text LIKE '%SELECT%'
^위와 같이 Long type 컬럼에 Like 조건 수행 시 제약사항으로 인한 에러가 발생하기 때문에 Long type 컬럼의 경우 WHERE 절 조건으로 사용할 수 없습니다.
참고 : TBR-8063
/*
* err: -8063
* name: ERROR_DML_LONG_NOT_PERMITTED
* desc: LONG columns are not permitted.
* cause: LONG type columns cannot be used.
* action: Modify the query.;
*/
3. 우회방안
3.1 LONG_TO_CHAR 함수사용
LONG_TO_CHAR 함수를 사용하여 TEXT 컬럼에 조건을 주어 검색합니다.
- 사용 예제
SELECT * FROM dba_source WHERE LONG_TO_CHAR(text) LIKE '%FROM%';
주의
단, 해당 함수는 최대 4000 bytes 까지의 LONG 데이터를 읽어서 VARCHAR2 타입으로 만들기 때문에 4000 bytes 이후의 데이터에 대해서는 검색이 불가능합니다.
3.2 TEXT 컬럼(LONG 타입)의 데이터를 CLOB 타입으로 이관
CLOB 타입을 컬럼으로 가지는 임시 테이블을 생성하여 TEXT 컬럼(LONG 타입)의 데이터를 임시테이블로 이관합니다.
CLOB 타입은 WHERE절 조건 검색이 가능하므로 임시테이블의 TEXT 컬럼(Clob 타입)에 조건을 주고 검색합니다.
- 사용 예제
#1. 임시테이블 생성 CREATE TABLE temp_dba_source ( OWNER VARCHAR(128), NAME VARCHAR(128), TYPE VARCHAR(12), TEXT CLOB) TABLESPACE usr; INSERT INTO temp_dba_source SELECT OWNER, NAME, TYPE, TO_LOB(TEXT) FROM dba_source; #2. 임시테이블에서 데이터 조회 SELECT TEXT FROM temp_dba_source WHERE TEXT LIKE '%MD5%';
참고 : LONG 타입의 제약조건
1) long 타입의 컬럼은 테이블당 하나만 생성할 수 있다.
2) where 절의 조건으로 사용할 수 없다.
3) group by, order by, connect by에 사용할 수 없다.
4) distinct, unique, intersect, minus, union을 사용한 쿼리에 사용할 수 없다.
5) substr 등 sql 함수에 사용할 수 없다.
6) create table ... as select 구문에서 사용할 수 없다.
7) alter table ... move tablespace 구문에서 사용할 수 없다.
8) 2G byte까지의 자료를 저장할 수 있다.
9) index key로 사용할 수 없다.