오라클 long 타입 insert

개발/실전 2014. 8. 28. 17:52

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;

 

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

 

 

'개발 > 실전' 카테고리의 다른 글

하루동안 열지 않기 [쿠키]  (0) 2015.04.01
checkbox 사용  (0) 2014.10.29
getInstance() 란 무엇인가  (0) 2014.06.18
현재시간함수  (0) 2014.06.05
executeQuery, executeUpdate  (0) 2014.06.03