使用SQLcl导出APEX应用时遭遇ORA-06502错误求助
问题说明
使用SQLcl 20.3/21.4/22.3版本执行命令 apex export -applicationid 1681 导出APEX应用1681时,触发以下错误:
java.sql.SQLException: ORA-06502: PL/SQL: numeric or value error ORA-06512: in "APEX_220100.WWV_FLOW_EXPORT_API", row 143 ORA-06512: in "APEX_220100.WWV_FLOW_GEN_API2", row 10218 ORA-06512: in "SYS.DBMS_ASSERT", row 493 ORA-06512: in "SYS.DBMS_ASSERT", row 583 ORA-06512: in "APEX_220100.WWV_FLOW_GEN_API2", row 10194 ORA-06512: in "APEX_220100.WWV_FLOW_EXPORT_INT", row 1234 ORA-06512: in "APEX_220100.WWV_FLOW_EXPORT_API", row 81
同一数据库下,同事可正常导出,且通过APEX App Builder导出也成功,怀疑为本地环境问题。
排查步骤
核对环境变量配置
检查本地NLS_LANG环境变量,确保与能正常导出的同事环境一致(例如AMERICAN_AMERICA.AL32UTF8),字符集不匹配可能导致导出时字符串长度溢出触发ORA-06502。同时排查JAVA_TOOL_OPTIONS、_JAVA_OPTIONS等参数,确认无特殊内存或编码限制。验证数据库会话参数
在SQLcl中执行SELECT * FROM nls_session_parameters;,对比同事的会话参数,重点关注NLS_CHARACTERSET、NLS_NCHAR_CHARACTERSET、NLS_LENGTH_SEMANTICS。可尝试手动设置会话参数后再执行导出:ALTER SESSION SET NLS_LENGTH_SEMANTICS = CHAR; ALTER SESSION SET NLS_CHARACTERSET = AL32UTF8;检查用户权限与角色
执行SELECT * FROM USER_ROLE_PRIVS;,对比与同事的角色权限差异,确保拥有APEX_ADMINISTRATOR_ROLE等导出所需权限。也可尝试用同事账号在本地SQLcl环境执行导出,区分是用户权限还是本地环境问题。清理SQLcl本地缓存与配置
删除SQLcl本地配置目录:Windows为%APPDATA%\SQLcl,Mac/Linux为~/.sqlcl,重启SQLcl后重试。同时可重新下载对应版本SQLcl,替换现有安装目录,排除安装包损坏问题。测试带附加参数的导出命令
尝试缩小导出范围,添加参数排查问题组件:apex export -applicationid 1681 -format sql -skipExportDate -skipInstallComments逐步调整参数,定位是否为特定应用组件导致的数值错误。
内容的提问来源于stack exchange,提问作者jzzh

