问题提出:
近日user在做 Print Customer Order Invoices出现错误,错误信息为:
Error [Oracle Error 06502: PL/SQL: numeric or value error: character string buffer too small] in report method [CUSTOMER_ORDER_COLL_IVC_RPI.Report_Collective_Invoice] ORA-20105: Report.REPRUNERR
问题分析:
1) 初步根据错误信息应该是某个栏位的字符串长度超长引起;
2) 跟踪Customer_Order_Inv_Head_API.Print_Invoices过程,至type_generic_address_api.get_address_form返回值为:
3Ma-203,Shihwa Industrial Complex,1374-2 Jungwang-Dong,Shiheung-cityKYUNGKI-DO 429-854 - KR - KOREA, REPUBLIC OF( 一客户地址 )
3) 出错错误在address_presentation_api.format_to_line过程内;
4) 最终的原因在于此过程内的address_rec_ Address_Rec_Type;的记录类型为
TYPE Address_Rec_Type IS RECORD
(address1 VARCHAR2(100),
address2 VARCHAR2(100),
address3 VARCHAR2(100),
address4 VARCHAR2(100),
address5 VARCHAR2(100),
address6 VARCHAR2(100));
5) 最终答案出来了:若客户地址长度超过100,此处肯定会报错。
问题解决:
1) 初步的解决方法是地址尽量避免100字符串长度;
2) 方法一不是最好的方法,因目前系统限定100字符串长度,暂时不修改,后续再视状况修改
问题总结:
一个小小的地址,也会造成BUG,IFS的客户地址发现的BUG是蛮多的,总感觉这个地方用的不是很放心,比较烦的是2K4地址不能输入回车换行,后续再了解此相关的代码,再来修改,以便使用正常。
PS:
1) IFS版本为2K4/好像2K1下地址这块还好用;
2) 20061101也写过一文,错误类型和地方与此一样,原文地址:
http://blog.csdn.net/foreveryday007/archive/2006/11/01/1360738.aspx
by foreveryday007 20080226
心有多大,宇宙就有多大。
http://blog.csdn.net/foreveryday007