개요
Long 데이터 타입 테이블은 to_lob 함수 또는 PL/SQL 블록을 이용해 복제할 수 있습니다.
방법
to_lob 함수를 이용한 복제
to_lob 함수는 LONG 타입 데이터를 CLOB 타입으로 변환하여 테이블에 복사할 때 사용합니다.
SQL> CREATE TABLE long_test (a LONG);
Table created.
Elapsed: 00:00:02.68
SQL> INSERT INTO long_test VALUES('vijay kaushik');
1 row created.
Elapsed: 00:00:01.09
SQL> COMMIT;
Commit complete.
Elapsed: 00:00:01.09
SQL> CREATE TABLE lob_test (a CLOB);
Table created.
Elapsed: 00:00:01.09
SQL> INSERT INTO lob_test SELECT TO_LOB(a) FROM long_test;
1 row created.
Elapsed: 00:00:01.09
SQL> COMMIT;
Commit complete.
SQL
복사
PL/SQL 블록을 이용한 복제
단순 INSERT문으로는 LONG 데이터를 다른 타입으로 변환할 때 오류가 발생할 수 있습니다.
이 경우, PL/SQL 블록을 이용하여 한 행씩 데이터를 복사하면 변환 오류를 피할 수 있습니다.
SQL> CREATE TABLE long_test
2 (x INT, y LONG);
Table created.
Elapsed: 00:00:01.14
SQL> CREATE TABLE varchar_test
2 (x INT, y VARCHAR2(4000));
Table created.
Elapsed: 00:00:01.14
SQL> INSERT INTO long_test VALUES(1,'vijay kaushik');
1 row created.
Elapsed: 00:00:01.14
SQL> COMMIT;
Commit complete;
-- 단순 INSERT 시 타입 변환 오류 발생\
Elapsed: 00:00:01.14
SQL> INSERT INTO varchar_test SELECT * FROM long_test;
TBR-11021: Error occurred during type casting.
-- PL/SQL 블록으로 복제
Elapsed: 00:00:01.34
SQL> BEGIN
2 FOR i IN (SELECT * FROM long_test)
3 LOOP
4 INSERT INTO varchar_test VALUES(i.x, i.y);
5 END LOOP;
6 END;
SQL> /
PL/SQL procedure successfully completed.
Elapsed: 00:00:01.62
SQL
복사