ORACLE

DB 이관문제로 INSERT INTO SELECT 문을 사용했다

보통 테이블이라면 (LONG타입이 없다면)

 

INSERT INTO TABLE1

SELECT * FROM TABLE2

 

하면, TABLE2의 내용이 전부 TABLE1에 삽입되게 된다. (여기서 TABLE1,2 는 컬럼, 속성이 같다)

하지만 LONG타입의 컬럼이 들어가있다면

 

ORA-00997: LONG 데이터 유형은 사용할 수 없습니다

이런 에러를 볼 수있다.

 

처음에는 INSERT INTO TALBL2 (MEMO) SELECT TO_LOB(MEMO) FROM TABLE2

 

이런식으로 LONG 타입을 LOB으로 변형시켜서 넣었다

에러는 안났는데

TABLE2에 데이터가 안들어가있는것이였다..ㅠㅠ

 

그래서....다시 인터넷 검색해서 찾아봤다.( 어렵게 찾았다 ㅠㅠ사실 내가 찾은것도 아니지만..)

DECLARE
 BEGIN
     DECLARE CURSOR CURSOR_NAME IS
           SELECT BOARD_NUM, ROOT_NUM, PARENT_NUM, STEP, DEPTH, TITLE, WRITER, CONTENT,

    CON_TYPE, INSERT_DATE, VISITED,EMAIL, IPADDR, PASSWD

FROM PLUS_BOARD;
     BEGIN
         FOR I IN CURSOR_NAME LOOP      
             INSERT INTO PLUS_BOARD2 (BOARD_NUM, ROOT_NUM, PARENT_NUM, STEP, DEPTH, TITLE, WRITER, CONTENT, CON_TYPE, INSERT_DATE, VISITED,EMAIL, IPADDR, PASSWD) 
             VALUES(I.BOARD_NUM, I.ROOT_NUM, I.PARENT_NUM, I.STEP, I.DEPTH, I.TITLE, I.WRITER, I.CONTENT, I.CON_TYPE, I.INSERT_DATE, I.VISITED,I.EMAIL, I.IPADDR, I.PASSWD);
         END LOOP;
     END;
 END;

 

즉,


 

DECLARE
 BEGIN
     DECLARE CURSOR CURSOR_NAME IS
           SELECT COLUMN1, COLUMN2   --테이블의 모든 컬럼을 넣어준다

     FROM TABLE2;
     BEGIN
         FOR I IN CURSOR_NAME LOOP      
             INSERT INTO TABLE1 (COLUMN1, COLUMN2)   --테이블의 모든 컬럼을 넣어준다           

            VALUES(I.COLUMN1, I.COLUMN2); --테이블의 모든 컬럼을 넣어준다            
         END LOOP;
     END;
 END;

원리는 모르겠지만 일단 성공은 했다.....

 

 

 

about author

PHRASE

Level 60  머나먼나라

싸움을 잘하는 사람은 먼저 이길 수 있는 준비를 다해 놓은 다음에 적과 싸워 이길 수 있는 기회를 기다린다. -손자

댓글 ( 4)

댓글 남기기

작성

ORACLE 목록    more