더북(TheBook)

이번 예제는 SELECT문이 간단해 DBMS_OUTPUT.PUT_LINE으로 출력이 가능하지만 정말 복잡하고 내용이 많으면, 즉 문장 길이가 VARCHAR2의 한계인 32KB가 넘어간다면 출력이 불가능하고 실행된 문장을 정확히 알아낼 수가 없다. 32KB를 넘어가는 문장이 과연 있을지 의심이 들겠지만, 실제로 그런 경우가 심심치 않게 존재하는 것이 현실이다. 그럼 이럴 땐 어떻게 하면 좋을까?

VARCHAR2 타입보다 큰 타입인 CLOB 타입을 이용하면 말끔히 해결된다. CLOBLOB Large Object

타입의 하나인데 LOB 타입이란 텍스트, 이미지, 비디오 등과 같은 대용량의 비정형 데이터를 저장하기 위한 데이터 타입으로 BLOB, CLOB, NCLOB, BFILE 타입이 있다. LOB 타입도 하나의 데이터 타입이므로 테이블의 컬럼 타입으로 사용할 수 있고 다른 데이터 타입에 비해 데이터 저장 용량이 크다.

LOB 타입에 대해 간단히 정리해보면 다음과 같다.

BLOB: Binary LOB 타입. 저장 용량은 최대 4G 정도

CLOB: 단일 혹은 다중 바이트 문자형 데이터(Character LOB)로 저장용량은 최대 4G 정도

NCLOB: CLOB와 비슷하나 유니코드 문자형 데이터(National Character LOB) 이며 최대 크기도 CLOB와 같음

BFILE: 데이터베이스 외부, 즉 OS 상에 저장된 이진파일(Binary File LOB)에 접근할 수 있는 데이터 타입

그렇다면 CLOB 타입을 어떤 식으로 이용한다는 것일까? 간단하다. 동적 쿼리 디버깅 전용으로 간단한 테이블을 만드는데 이 테이블의 한 컬럼을 CLOB 타입으로 만들고, 실행되는 동적 쿼리 내용을 CLOB 타입의 컬럼에 넣어두는 것이다. CLOB 타입은 4G 정도의 저장 용량을 갖고 있으므로 VARCHAR2 타입의 한계인 32KB를 넘어서는 쿼리 구문 정도는 거뜬히 제압할 수 있다.

실습을 해 보자. 먼저 동적 쿼리 디버깅용 테이블을 만들어 보자.

입력

    CREATE TABLE ch17_dyquery (
           program_name  VARCHAR2(50),
           query_textCLOB );

결과

    table CH17_DYQUERY이(가) 생성되었습니다.
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.