10000 Byte 중에
1. 제일 처음 1500 Byte 만 필요한 건가요?
2. 아니면 1500 Byte 씩 잘라서 여러개로 나누어야 하는 건가요?
1번이라면 애초에 파라미터를 넘기기 전에 1500 byte 만 잘라서 넘기면 됩니다.(프로그램에서 자르기)
2번이라면 변수를 CLOB 으로 선언해서 받아와야 합니다.
그리고 또 고려해야 할 부분이 1500 byte 부분에 한글이 걸쳐 있는 경우입니다.
잘리는 부분 양쪽에 한글이 걸쳐 잇으면 해당 한글이 소실될 수 있습니다.
이 부분도 고려해야 합니다.
마농님 답변 감사드립니다.
무조건 처음부터 1500 Byte 까지만 자르는 방법으로 쿼리문에서 할 수 있는 방법은 없을까요?
변수를 CLOB 으로 받아 오세요.
이미 자료가 그렇게 넘어 왔을시 할 수 있는 방법이 없을까요?
SELECT TO_CLOB('장문의 텍스트..') FROM DUAL;
이렇게 변경도 안되네요....
VARCHAR2 로는 값을 받아오는 것자체가 안됩니다. CLOB 으로 받아와야 합니다.
마농님 답변 감사드립니다..
오랜지나 토드등 툴에서 임의로 장문의 텍스트를 기술 후
SELECT TO_CLOB('장문의 텍스트....') FROM DUAL;
할 시에 "ORA-01704: 문자열이 너무 깁니다" 가 나는 것도 어쩔 수 없는 건지요?
"CLOB 으로 받아와야 합니다" 라는 말씀이 이해가 안되네요..ㅠㅠ
1. 값을 받아 오기 위해서는 변수가 선언되어 있어야 할 것입니다.
- 넘겨줄 데이터 타입이나 받아올 데이터 타입도 정해져 있겠지요.
- 받는 쪽 변수의 타입을 CLOB 으로 하셔야 합니다.
2. DB 의 SELECT 문에서는 문자가 4000byte 까지만 가능합니다.
- java 등의 어플리케이션에서 넘기기 전에 잘라서 넘기는 방법이 제일 간단하겠구요.
- 굳이 그대로 넘기길 바란다면 CLOB 으로 받아오셔야 합니다.
3. 쿼리 툴에서 긴 문자열 그대로 테스트 용도로만 실행해보고 싶다면
- 일반적인 Select 문에서는 문자는 4000 이지만
- PL/SQL 에서는 문자 변수 32767 까지 가능합니다.
- 10000 byte 정도라면 PL/SQL 로 툴에서 실행 가능합니다.
DECLARE v_c CLOB; v_v VARCHAR2(1500); BEGIN v_c := '긴 문자열'; v_v := SUBSTRB(v_c, 1, 1500); END; / DECLARE v_x VARCHAR2(32767); v_v VARCHAR2(1500); BEGIN v_x := '긴 문자열'; v_v := SUBSTRB(v_x, 1, 1500); END; /
마농님 답변 감사드립니다..^^
앞단 (java단) 에서 넘어온걸 쿼리에서 처리 하려고 했는데...java에서 mybatis로 CLOB으로 넘기는 부분을 먼저 봐야 겠네요...
친절한 설명 감사드립니다..^^