[Oracle] LONG 타입 데이터 TO_LOB 통해 CTAS, ITAS 하기
0. 결론부터
1) CTAS를 통한 생성 스크립트 예시
CREATE TABLE HR.LONG_TEST_CTAS AS
SELECT
ID,
TO_LOB(LONG_COLUMN) LONG_COLUMN
FROM HR.LONG_TEST;
2) ITAS를 통한 생성 스크립트 예시
-- 1. 대상 테이블 먼저 생성
CREATE TABLE HR.LONG_TEST_ITAS
( "ID" VARCHAR2(10 BYTE),
"LONG_COLUMN" LONG
) SEGMENT CREATION IMMEDIATE
NOLOGGING;
-- 2. ITAS 실행
INSERT INTO HR.LONG_TEST_ITAS
SELECT
ID,
TO_LOB(LONG_COLUMN) LONG_COLUMN
FROM HR.LONG_TEST;
3) 방법 요약
LONG 데이터를 이용해 INSERT를 하기 위해서는 TO_LOB( )을 통해 LONG 데이터를 CLOB 형태로 임시로 바꿔줘야한다. (CLOB : Charcater Large OBject)
이때 SELECT 절에는 모든 컬럼을 명시해주고 LONG 타입 컬럼에서 TO_LOB( )을 통해 데이터 형을 변경해주면 된다.
주의 할 점 : TO_LOB을 하는 컬럼의 Alias를 반드시 입력해줘야한다.
1. CTAS, ITAS란?
대량의 테이블을 다른 테이블로 옮길때, CTAS와 ITAS를 이용하면 편리하다.
1) CTAS : Create Table As Select
테이블을 생성하면서 기존 테이블의 데이터를 복사하는 방법이다.
- 활용예1 - 기존 테이블과 동일한 레이아웃, 데이터를 가진 테이블 생성
CREATE TABLE {생성할 테이블}
SELECT * FROM {데이터를 가져올 테이블};
- 활용예2 - 기존 테이블과 동일한 레이아웃을 가진 빈 테이블 만들기
CREATE TABLE {생성할 테이블}
SELECT * FROM {데이터를 가져올 테이블}
WHERE 1=2;
이 외에 컬럼을 명시해줘서 데이터를 변형할 수 있다.
2) ITAS : Insert Table (As) Select
CTAS를 이용하면 만들어진 테이블은 기존 테이블과 레이아웃이 동일하다.
ITAS를 이용할 경우 원하는 레이아웃으로 테이블을 만들고, 데이터만 CTAS 에서 처럼 가져올 수 있다.
(예시는 위에 0.결론 부분 참고)
2. LONG 데이터 타입
이름에서 알 수 있듯이 큰 데이터를 저장할 수 있는 컬럼의 데이터 타입이다.
Java에서는 Long이 8Bytes에 불과하지만, 오라클에서는 무려 2GB의 데이터를 저장할 수 있다.
* Oracle은 LOB 타입 권장(8i 이후), LONG은 이전 버전에서 많이 쓰임.
3. LOB 데이터 타입
위에 CLOB에서 살짝 언급이 됐는데 Large OBject의 줄임말이다.
최대 4GB의 데이터를 저장할 수 있다. BLOB, CLOB, NCLOB 등이 있음.
BLOB - Binary
CLOB - (Single-btye) Character
NCLOB - National Character (유니코드)