오라클 에러 질문이 있습니다. 0 5 2,488

by 초보개발자 [SQL Query] [2023.04.03 14:14:41]


DBMS_LOB.SUBSTR(B.CONTENTS, 10000, 1) 

이렇게 쿼리를 짜면 ORA-06502 PL/SQL: 수치 또는 값 오류: 문자열 버퍼가 너무 작습니다. 라고 에러가 나서 

DBMS_LOB.SUBSTR(B.CONTENTS, 50000, 1)  4만까지 에러가 나고 5만 줬더니 에러는 안나는데 

CONTENTES  값이 NULL로 다 나옵니다.. 이거 해결 방법 없을까요?

부탁드립니다.

 

 

 

by 신이만든지기 [2023.04.03 15:42:50]

이렇게 해보세요.

select dbms_lob.substr(b.contents, dbms_lob.getlength(b.contents), 1) from table_name

 


by 초보개발자 [2023.04.03 16:31:43]

와 감사합니다 출력이 됩니다!! 감사합니다.


by 마농 [2023.04.03 16:10:59]

구문에 문제가 있는게 아니라 다른데 문제가 있는게 아닐까요?
해당 쿼리의 결과를 다른 변수에 담을 때 에러가 나는것은 아닌지?
(예 : 변수의 크기가 작을 때)


by 초보개발자 [2023.04.03 16:15:24]

오렌지 툴에서 sql 실행시 나는 에러고 딱히 변수에 담지는 않았습니다. 쿼리 실행 할때 에러가 나더라구요


by 신이만든지기 [2023.04.03 16:51:20]

DBMS_LOB.SUBSTR(컬럼, 가져올 크기, 시작위치)

dbms_lob.substr 함수의 3개 파라미터 중에 "가져올 크기"에서 문제가 발생한 걸로 보입니다.

각 row마다 해당 b.contents 컬럼 데이터의 길이가 다를텐데요. 

지정한 크기보다 데이터가 짧으면 발생하는 문제인 것 같습니다.

그러므로 실제 데이터의 크기만큼만 가져오도록 dbms_lob.getlength 를 사용하면 해결되는 것 같습니다.

 

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