글자수 제한 문의 드립니다. 1 8 6,327

by 동동동 [Oracle 기초] Oracle 쿼리 [2022.09.22 16:35:01]


안녕하세요..칼럼 사이즈 때문에 글자수 제한을 두고 있는데요...

SUBSTRB('장문내용...', 1, 1500) 이렇게 최대 1500byte만 잘라서 넣으려고 하는데요.

 

내용이 9천자 이상, byte로는 10,000 byte이상의 글자를 SUBSTRB하려고 하니깐 

"ORA-01704: 문자열이 너무 깁니다" 에러가 나네요..

 

쿼리의 파라메터로 넘어온 장문의 데이터 값을 원하는 자릿수 만큼 자르는 방법이 있을까요?

 

by 마농 [2022.09.22 17:17:16]

10000 Byte 중에
1. 제일 처음 1500 Byte 만 필요한 건가요?
2. 아니면 1500 Byte 씩 잘라서 여러개로 나누어야 하는 건가요?
1번이라면 애초에 파라미터를 넘기기 전에 1500 byte 만 잘라서 넘기면 됩니다.(프로그램에서 자르기)
2번이라면 변수를 CLOB 으로 선언해서 받아와야 합니다.
그리고 또 고려해야 할 부분이 1500 byte 부분에 한글이 걸쳐 있는 경우입니다.
잘리는 부분 양쪽에 한글이 걸쳐 잇으면 해당 한글이 소실될 수 있습니다.
이 부분도 고려해야 합니다.
 


by 동동동 [2022.09.23 10:21:04]

마농님 답변 감사드립니다.

무조건 처음부터 1500 Byte 까지만 자르는 방법으로 쿼리문에서 할 수 있는 방법은 없을까요?

 

 


by 마농 [2022.09.23 10:47:43]

변수를 CLOB 으로 받아 오세요.


by 동동동 [2022.09.23 10:52:30]

이미 자료가 그렇게 넘어 왔을시 할 수 있는 방법이 없을까요?

SELECT TO_CLOB('장문의 텍스트..') FROM DUAL;

이렇게 변경도 안되네요....


by 마농 [2022.09.23 10:54:08]

VARCHAR2 로는 값을 받아오는 것자체가 안됩니다. CLOB 으로 받아와야 합니다.


by 동동동 [2022.09.23 20:33:51]

마농님 답변 감사드립니다..

 

오랜지나 토드등 툴에서 임의로 장문의 텍스트를 기술 후

SELECT TO_CLOB('장문의 텍스트....') FROM DUAL;

할 시에 "ORA-01704: 문자열이 너무 깁니다"  가 나는 것도 어쩔 수 없는 건지요?

 

"CLOB 으로 받아와야 합니다" 라는 말씀이 이해가 안되네요..ㅠㅠ

 


by 마농 [2022.09.26 09:48:41]

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;
/

 


by 동동동 [2022.09.26 15:01:26]

마농님 답변 감사드립니다..^^

앞단 (java단) 에서 넘어온걸 쿼리에서 처리 하려고 했는데...java에서 mybatis로 CLOB으로 넘기는 부분을 먼저 봐야 겠네요...

 

친절한 설명 감사드립니다..^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입