일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- MongoDB
- redis 설치
- Mongodb 설치
- MongoDB 계정
- GEB
- 테스트 자동화
- MongoDB Role
- centos
- 통합테스트
- MongoDB Role 생성
- MongoDB 계정 생성
- REDIS
- Today
- Total
소울메이커
ORA-06502 – PL/SQL: numeric or value error string 본문
데이터 마이그레이션을 수행 과정에서 ORA-06502 오류가 발생 하였다.
원인은 LONG 타입 데이터를 LONG 타입으로 이관 시 데이터 형태가 맞지 않았기 때문.
LONG타입은 제약사항이 많아 마이그레이션 시 데이터를 그대로 옮길 수 없는경우가 많다.
이를 해결하기 위해서 방법을 고민 하던 중 결국 해결.. 뭐 문제없이 해결 되었지만 왠지모를 찝찝함이 남는다.
어쨌든.. 해결방법을 정리 한다.
1. 먼저 LONG타입 컬럼을 제외한 나머지 데이터들을 옮길 테이블로 insert 한다 insert into table () select ....
2. LONG 타입 데이터를 갖고 있는 테이블에 LONG 타입 TEMP 컬럼 하나 추가(기존 LONG타입 데이터를 넣을 컬럼이다)
3. 원래의 기존 LONG 타입 컬럼을 CLOB 데이터 타입으로 변경.(CLOB 타입은 DBMS_LOB.SUBSTR로 문자를 자를 수 있다. LONG은 데이터 가공이 불가기때문에 변경 함.)
4. 변경 한 기존 컬럼의 데이터를 4000바이트(VARCHAR타입으로 가져와야 하며 VARCHAR는 4000바이트가 최대) 씩 자름.
이것을 수행하기 위해 프로시저를 생성하였다.
프로시저 로직은 커서를 이용하여 CLOB으로 변경 한 기존 컬럼의 데이터를 가져와 2000바이트씩 잘라 long 타입변수에
자른 값들을 || 로 묶어 넣은 뒤 그 값을 옮길 테이블로 업데이트 시킨다.
문자를 자를때에는 DBMS_LOB.SUBSTR(컬럼, 자를 크기, 시작점)를 사용한다.
데이터에는 한글이 포함되어 있고 한글은 2byte를 사용하기때문에 2000바이트씩 잘랐다.
5. 데이터는 정상적으로 들어갔다. 그럼 clob으로 변경 한 기존 컬럼을 temp컬럼으로 옮긴 후 기존 컬럼을 삭제하고
temp 컬럼을 기존 컬럼명으로 변경한다. clob타입에서 long타입으로 이관할 땐 제약이 많지 않다.
크기만 벗어나지 않으면 update long타입 컬럼 = clob타입 컬럼으로 업데이트가 가능하다.
문제 해결 완료.
'프로그래밍' 카테고리의 다른 글
오라클 11g update select (0) | 2013.06.05 |
---|---|
ORACLE TIMESTAMP (0) | 2013.05.08 |
PL/SQL 개발 시 콘솔 로그 찍는 방법 DBMS_OUTPUT.PUT_LINE() (0) | 2013.04.16 |
리눅스 파일 내용만 삭제 cat /dev/null (0) | 2013.04.16 |
아파치 웹서버와 톰캣 서버 연동을 위한 mod_jk 설치 (0) | 2013.04.12 |