DB 함수 생성 작업 중 처음 보는 SQLCODE가 조회되었습니다..
원인을 찾으려고 이것저것 해보다가 유용한 함수 하나를 발견했습니다.
DBMS_OUTPUT.PUT_LINE(SQLERRM);
SQLERRM은 오류 코드(SQLCODE)와 관련된 메세지를 반환해주는 함수입니다.
FN_GET_WORKTM이라는 함수에는 예외 처리로 SQLCODE를 리턴해주고 있는데 검색 중 발견한 함수를 바로 사용해봤습니다.
그리고 다시 조회를 해봤습니다.
오류 메시지가 출력되고 아래 DBMS OUTPUT에서 그 이유를 찾을 수 있었습니다.
ORA-06502: PL/SQL: 수치 또는 값 오류 문자열 버퍼가 너무 작습니다.
원인은 함수에서 조회 된 컬럼의 크기보다 리턴하는 변수의 크기가 작았기 때문이었습니다.
예를 들어, A라는 컬럼이 조회되었고 조회된 값은 변수 V_A에 입력되어 리턴됩니다.
=> SELECT A INTO V_A FROM TABLE
이 때 A의 크기는 VARCHAR2(15)이고 리턴되는 변수 V_A의 크기는 VARCHAR(10)으로 정의가 되어있다면 해당 오류가 발생합니다.
프로시저에서도 이런 에러가 발생할 수 있습니다. 프로시저 내에 선언된 변수에 어떤 값을 담으려고 할 때, 담으려고 하는 값의 크기가 선언된 변수의 크기보다 크다면 이 에러를 마주칠 수 있을 것입니다.
동일하게 맞추어 다시 조회하니 정상 조회가 되었습니다.
피드백은 언제나 환영입니다 :)