250x250
Notice
Recent Posts
Recent Comments
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- SpringBoot
- 오픈소스
- maven
- jpa
- Source
- STS
- Open Source
- JDBC
- Thymeleaf
- Exception
- myBatis
- 설정
- MSSQL
- Python
- PostgreSQL
- spring
- JavaScript
- Spring Boot
- git
- oracle
- error
- AJAX
- Core Java
- MySQL
- 문서
- Docker
- Tomcat
- IntelliJ
- Eclipse
- ubuntu
Archives
- Today
- Total
헤르메스 LIFE
[Oracle] LONG 데이터타입 -> VARCHAR2 데이터로 변환. 본문
728x90
원문 : http://www.cspark.net/174
데이터 이관 도중에 LONG TYPE의 데이터를 VARCHAR2 형식으로 변경하는 이슈가 생겼다.
이 망할 LONG 타입은 TO_CHAR 함수 따위는 통하질 않는다..ㅡㅡa;;..
이래저래 구글링을 통해 확인한바에 의하면 LONG 타입을 PL/SQL에서 읽은후 SUBSTR으로 원하는 길이만큼 잘라서 쓰자.;
일단 차근차근 아래 순서대로 진행을 해보자.
우선 LONG 타입의 컬럼을 가지고 있는 테이블을 "T_TABLE_LONG" 이라고 하자.;;
1. 데이터를 옮길 대상 테이블을 생성한다. : "T_TABLE_VARCHAR" 라하자.;
1 2 3 4 5 | CREATE TABLE T_TABLE_VARCHAR( SEQ NUMBER, CONTENT VARCHAR2(4000)) |
2. FUNCTION 생성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | CREATE OR REPLACE FUNCTION FNC_LONG2CHAR ( ori_rowid ROWID, ori_column VARCHAR2, -- ori_table의 LONG TYPE 컬럼명. ori_table VARCHAR2 ) RETURN VARCHARAS longCont VARCHAR2 (32767); sqlQuery VARCHAR2 (2000);BEGIN sqlQuery := 'select ' || ori_column || ' from '|| ori_table || ' where rowid = '|| CHR (39)|| ori_rowid|| CHR (39); EXECUTE IMMEDIATE sqlQuery INTO longCont; longCont := SUBSTR (longCont, 1, 4000); RETURN longCont;END;/ |
3. 실제 사용 쿼리
1 2 3 4 5 | INSERT INTO t_table_varchar (seq, content) (SELECT seq, fnc_long2char (ROWID, 'LONG_COLUMN_NAME', 'T_TABLE_LONG') content FROM t_table_long) |
1. FUNCTION 실행시 "ORA-06502: PL/SQL: 수치 또는 값 오류: 문자열 버퍼가 너무 작습니다" 오류를 만나게 된다면
SUBSTR에서 자르는 범위를 좀더 줄이도록하자.
2. longCont의 크기가 32767 는 LONG 타입의 최대 사이즈수이다.
3. PL/SQL에서는 DDL문을 직접 작성할수 없기 때문에 "EXECUTE IMMEDIATE "를 통해서 동적 QUERY 방식으로
수행하게 된다.
728x90
'Database' 카테고리의 다른 글
| [Oracle] Oracle Client Instant 64bit 버젼 (0) | 2013.03.04 |
|---|---|
| Oracle Database 10g Express Edition: 초보자만을 위한 제품이 아닙니다. (0) | 2012.11.17 |
| [Oracle] NLS_LANG CharacterSet 변경 (0) | 2012.11.04 |
| [Oracle] Oracle Database 11g Express Edition 다운 및 설치 (0) | 2012.11.04 |
| [Schema] MS-SQL JPetStore Schema (0) | 2012.06.22 |