gpt4 book ai didi

甲骨文 - ORA-06502 : PL/SQL: numeric or value error (DBMS_OUTPUT)

转载 作者:行者123 更新时间:2023-12-01 09:22:31 24 4
gpt4 key购买 nike

我实现了一个返回 的函数clob 数据类型,我想在 中打印结果DBMS 输出 .不幸的是,我收到了 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 数据库 11g 企业版 11.2.0.3.0 版 - 64 位生产版

最佳答案

如果大于 32767 字节,您将无法直接使用 dbms_output.put_line 打印 clob。

如果是这种情况,您可以创建一个过程来遍历 clob 并一次打印出一个较小的块。这样的程序和测试脚本如下:

declare 

c clob;

procedure print_clob( p_clob in clob ) is
v_offset number default 1;
v_chunk_size number := 10000;
begin
loop
exit when v_offset > dbms_lob.getlength(p_clob);
dbms_output.put_line( dbms_lob.substr( p_clob, v_chunk_size, v_offset ) );
v_offset := v_offset + v_chunk_size;
end loop;
end print_clob;


begin
for i in 1..10000 loop
c := c || 'test';
end loop;
--This will result in ora-06502
--dbms_output.put_line(c);

print_clob(c);

end;

请注意, v_chunk_size 必须导致一次分块少于 32767 个字节。如果编码每个字符有 2 个字节,则需要使用 (32767/2)。

关于甲骨文 - ORA-06502 : PL/SQL: numeric or value error (DBMS_OUTPUT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26723362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com