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로 다 나옵니다.. 이거 해결 방법 없을까요?
부탁드립니다.
이렇게 해보세요.
select
dbms_lob.substr(b.contents, dbms_lob.getlength(b.contents), 1)
from
table_name
와 감사합니다 출력이 됩니다!! 감사합니다.
구문에 문제가 있는게 아니라 다른데 문제가 있는게 아닐까요? 해당 쿼리의 결과를 다른 변수에 담을 때 에러가 나는것은 아닌지? (예 : 변수의 크기가 작을 때)
오렌지 툴에서 sql 실행시 나는 에러고 딱히 변수에 담지는 않았습니다. 쿼리 실행 할때 에러가 나더라구요
DBMS_LOB.SUBSTR(컬럼, 가져올 크기, 시작위치)
dbms_lob.substr 함수의 3개 파라미터 중에 "가져올 크기"에서 문제가 발생한 걸로 보입니다.
각 row마다 해당 b.contents 컬럼 데이터의 길이가 다를텐데요.
지정한 크기보다 데이터가 짧으면 발생하는 문제인 것 같습니다.
그러므로 실제 데이터의 크기만큼만 가져오도록 dbms_lob.getlength 를 사용하면 해결되는 것 같습니다.