dbms_output.put_line 在 PLSQL Developer 中对于超过 32512 个字符的字符串失败并出现 ORA-06502
dbms_output.put_line in PLSQL Developer fails with ORA-06502 for strings longer than 32512 chars
此脚本在 PLSQL 开发者版本 14.0.0.1961 中失败(错误 ORA-06502: PL/SQL: numeric or value error: character string buffer too small
):
declare
v varchar2(32767) := rpad('x',32513,'x');
begin
dbms_output.enable(null);
dbms_output.put_line(v);
end;
/
- 如果 32513 被替换为更高的值,它也会失败。
- 如果 32513 被替换为较低的值,它就可以工作(即打印文本而不会失败)。
- 在 SQL*Plus 和 Toad 中,它最多适用于 32767(这是预期的)。
- 在 Intellij Idea 中,它最多适用于 32766,对于 32767,它不会引发异常,但不会打印任何内容。
我该如何解释这种行为? 32512 似乎是一个有趣的常量(我在一些 APEX question, question about blobs and is also mentioned in JDBC tutorial 中找到它,但我错过了与所描述问题的任何联系。)
看起来像 PL/SQL 开发者错误。
2013 年,他们说他们会 fix it:
it's a bit of a low-level issue, so his may need to wait until version 11.0.
你用的是哪个版本?
此脚本在 PLSQL 开发者版本 14.0.0.1961 中失败(错误 ORA-06502: PL/SQL: numeric or value error: character string buffer too small
):
declare
v varchar2(32767) := rpad('x',32513,'x');
begin
dbms_output.enable(null);
dbms_output.put_line(v);
end;
/
- 如果 32513 被替换为更高的值,它也会失败。
- 如果 32513 被替换为较低的值,它就可以工作(即打印文本而不会失败)。
- 在 SQL*Plus 和 Toad 中,它最多适用于 32767(这是预期的)。
- 在 Intellij Idea 中,它最多适用于 32766,对于 32767,它不会引发异常,但不会打印任何内容。
我该如何解释这种行为? 32512 似乎是一个有趣的常量(我在一些 APEX question, question about blobs and is also mentioned in JDBC tutorial 中找到它,但我错过了与所描述问题的任何联系。)
看起来像 PL/SQL 开发者错误。
2013 年,他们说他们会 fix it:
it's a bit of a low-level issue, so his may need to wait until version 11.0.
你用的是哪个版本?