You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用xlsx_builder_pkg导出数据遇ORA-06502错误求助

解决xlsx_builder_pkg导出数据时的ORA-06502文本缓冲区过小问题

问题分析

报错指向xlsx_builder_pkg的1646行t_tmp := t_tmp || t_str,本质是字符串拼接时超出了t_tmp变量的长度限制:

  • PL/SQL中VARCHAR2类型在块内最大支持32767字节,当导出500行数据时,拼接生成的Excel XML内容超过了这个阈值,触发ORA-06502错误;而400行数据的拼接内容未达上限,所以可以正常执行。

解决方案

1. 修改包体中的缓冲区变量类型

打开xlsx_builder_pkg.pkb,找到1646行所在的过程/函数:

  • 将t_tmp的类型从VARCHAR2改为CLOB(CLOB最大支持4GB存储,完全满足大内容拼接需求)
  • 替换字符串拼接方式:用DBMS_LOB.APPEND(t_tmp, t_str)代替原有的||操作符(||对CLOB也兼容,但DBMS_LOB.APPEND是更标准的大对象操作方式)

示例修改:

-- 原代码
t_tmp VARCHAR2(32767);
t_tmp := t_tmp || t_str;

-- 修改后
t_tmp CLOB;
DBMS_LOB.APPEND(t_tmp, t_str);

2. 检查并修改其他相关缓冲区变量

同时检查报错涉及的1870行及包内其他负责拼接XML内容的临时变量,将所有用于存储拼接内容的VARCHAR2变量统一改为CLOB,避免后续出现同样的缓冲区溢出问题。

3. 重新编译包

修改完成后,执行以下命令重新编译包体和包规范:

ALTER PACKAGE xlsx_builder_pkg COMPILE BODY;
ALTER PACKAGE xlsx_builder_pkg COMPILE;

验证

重新执行你的导出PL/SQL块:

BEGIN
xlsx_builder_Pkg.clear_workbook;
xlsx_builder_pkg.new_sheet ('country');
xlsx_builder_pkg.query2sheet (p_sql => 'SELECT distinct name FROM system.institution where rownum < 500', p_sheet => 1);    
xlsx_builder_pkg.save ('country', 'country.xlsx');
END;
/

内容的提问来源于stack exchange,提问作者ziajak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:35:13