直接调用正常,跨Schema调用COMMON.GetGHSInformation()抛ORA-06502错误
问题分析:跨Schema调用存储过程触发ORA-06502错误
核心原因
ORA-06502本质是字符串拼接后的总长度超过了输出变量的最大允许长度,问题根源在P_OUTPUTTEXT参数的长度定义上:
- 存储过程中
P_OUTPUTTEXT声明为IN OUT VARCHAR2但未指定长度,Oracle PL/SQL中这种未指定长度的参数,实际可用长度由调用方传入的变量长度决定。 - 直接调用时,你大概率传入了长度足够的变量(比如测试PL/SQL块中声明的
VARCHAR2(32767)类型变量),拼接后的GHS文本总长度未超出上限,因此运行正常。 - 当
OtherSchema.DoSomethingGHSRelated()调用时,该过程中传入的P_OUTPUTTEXT对应变量长度不足(比如被声明为VARCHAR2(1000)甚至更短),多个GHS文本拼接后总长度超过限制,就触发了ORA-06502错误。
验证与修复建议
- 检查调用方变量:查看
OtherSchema.DoSomethingGHSRelated()中传入GetGHSInformation的P_OUTPUTTEXT变量声明,确认其长度是否足够容纳所有GHS文本的拼接结果。 - 修改存储过程参数:将
COMMON.GetGHSInformation()中的P_OUTPUTTEXT明确指定足够大的长度,比如:
这样无论调用方传入的变量长度如何,存储过程内部都能使用PL/SQL允许的最大VARCHAR2长度(32767字节)处理拼接。P_OUTPUTTEXT IN OUT VARCHAR2(32767)
内容的提问来源于stack exchange,提问作者kbd
相关产品推荐
相关产品推荐

