I implemented a function that returns clob data-type, and I would like to print the result in DBMS Output. Unfortunately, I am getting ORA-06502: PL/SQL: numeric or value error and I think it is due to the size of DBMS_OUTPUT.
This is the code.
DECLARE
TYPE tp_col_array IS TABLE OF varchar2(32767);
FUNCTION my_fn (
p_in_proc_date IN varchar2)
RETURN clob AS
vr_output_str clob;
BEGIN
-- Detailed code hidden due to privacy. Sorry
RETURN vr_output_str;
EXCEPTION
WHEN LOGIN_DENIED
THEN
DBMS_OUTPUT.PUT_LINE('Invalid username/password: logon denied');
RETURN 'TEST Terminated';
END my_fn;
BEGIN
DBMS_OUTPUT.PUT_LINE(my_fn('31-AUG-14'));
END;
Here are something that can help you to understand this issue
1) Added the following to set the size of buffer unlimited, but did not work..
DBMS_OUTPUT.ENABLE(NULL);
or
set serveroutput on size unlimited;
Related link: http://www.oracle-developer.net/display.php?id=327
2) It is noted that the size of vr_output_str is 75387, and that is why the return type is CLOB.
DBMS_LOB.getlength(vr_output_str); // =75387
3) I can solve the issue by doing the following, but I think this is not a good solution since it executed the function three times.
DBMS_OUTPUT.PUT_LINE(SUBSTR(my_fn ('31-AUG-14'), 1, 32767));
DBMS_OUTPUT.PUT_LINE(SUBSTR(my_fn ('31-AUG-14'), 32768, 32767));
DBMS_OUTPUT.PUT_LINE(SUBSTR(my_fn ('31-AUG-14'), 65536, 32767));
4) I am using Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…