1.원인발생
서로 컬럼의 크기가 다른 LONG RAW 타입의 데이터를 인서트 or 업데이트 할 때 발생
LONG RAW 타입은 이미지를 저장하거나, 대용량의 데이터를 저장할때 사용.
2.해결방법
step1. 데이터를 넣을 테이블의 정보를 확인
일반적인 desc table명; 으로는 타입만 보인다. 평범한 타입이면 상관이없으나, 이미지 저장이나 대용량 저장을 위한 LONG RAW타입은 할당 된 데이터의 크기를 알지못하므로 테이블 스크립트를 통해 할당된 용량을 확인.
step2. 쉬운 케이스 (BLOB 컬럼이 COLUMN_B, COLUMN_D)
1)INSERT INTO TABLE_A(COLUMN_A,COLUMN_B)
SELECT COLUMN_C, TO_LOB(COLUMN_D) FROM TABLE_B
2)INSERT INTO TABLE_A(COLUMN_A,COLUMN_B)
SELECT COLUMN_C, TO_BLOB(COLUMN_D) FROM TABLE_B
일반적으로는 이렇게 해결이 됨.
==>이렇게 해결이 안되면 PL/SQL를 사용
step3. 어려운케이스(오라클의 CURSOR와 LOOP를 사용한다.)
--CURSOR_NAME 커서의 이름
DECLARE
BEGIN
DECLARE CURSOR CURSOR_NAME IS
SELECT COLUMN_C, COLUMN_D FROM TABLE_B
BEGIN
FOR I IN CURSOR_NAME LOOP
INSERT INTO TABLE_A
(COLUMN_A,COLUMN_B)
VALUES(I.COLUMN_C, I.COLUMN_D);
END LOOP;
END;
END;
몰라서 한참 찾았는데 해결방법이 너무쉬워서 허탈하다.
PL/SQL공부를 해야할듯.
'Study > SQL.' 카테고리의 다른 글
[Oracle] 최근 변경 데이터 조회(Timestamp) (0) | 2024.01.17 |
---|---|
프로그래머스 SQL Lv.1 최댓값 구하기 (0) | 2022.07.11 |
프로그래머스 SQL Lv.1모든레코드 조회하기 (0) | 2022.07.11 |
Oracle DB, MySql 구문차이 (0) | 2021.09.08 |
쓸때마다 찾아봐서 결국 적어놓는 쿼리 (0) | 2021.07.28 |