Oracle - ORA-06502: PL / SQL: ошибка числа или значения (DBMS_OUTPUT)
Я реализовал функцию, которая возвращаетCLOB тип данных, и я хотел бы напечатать результат вВывод СУБД, К сожалению я получаюORA-06502: PL / SQL: ошибка числа или значения и я думаю, что это связано с размером DBMS_OUTPUT.
Это код.
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;
Вот кое-что, что может помочь вам понять эту проблему
1) Добавлено следующее, чтобы установить размер буферанеограниченный, но не сработало ..
DBMS_OUTPUT.ENABLE(NULL);
или же
set serveroutput on size unlimited;
Ссылка по теме:http://www.oracle-developer.net/display.php?id=327
2) Следует отметить, что размер vr_output_str равен75387и именно поэтому возвращаемый типCLOB.
DBMS_LOB.getlength(vr_output_str); // =75387
3) Я могу решить проблему, выполнив следующее, но я думаю, что это нехорошее решение так как он выполнил функцию три раза.
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) Я используюOracle Database 11g Enterprise Edition, выпуск 11.2.0.3.0 - 64-разрядная версия