【发布时间】:2014-12-30 15:32:34
【问题描述】:
我实现了一个返回 clob 数据类型的函数,我想在 DBMS 输出 中打印结果。不幸的是,我收到 ORA-06502: PL/SQL: numeric or value error,我认为这是由于 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) 添加以下设置缓冲区的大小unlimited,但不起作用..
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 Release 11.2.0.3.0 - 64bit Production
【问题讨论】:
标签: oracle plsql oracle11g dbms-output