ORA-06502: PL/SQL: 数字或值错误 : character string buffer too
(2015-01-08 11:30:08)
标签:
股票oracleit |
分类: oracle |
因为需要将特定列数据进行行转列,进行比较和处理。所以WM_CONCAT是最好的解决函数。但因长度限制,网上的方案是采用了CLOB返回值的方式,是针对一次数据查询的结果。而我现在是多次进行查询,每次查询的值不是很大,而引起的错误,分析是不是WM_CONCAT的内存块不够产生的原因。因而采用了另种解决方式。
一、针对多次返回结果解决方式
CREATE OR REPLACE FUNCTION GET_CUSTNO_GROUP(v_para1 in VARCHAR2,v_para2 in VARCHAR2,v_type in number)
RETURN VARCHAR2
IS
v_custno_tmp VARCHAR2(4000);
v_sql
VARCHAR2(1024);
v_custno t01_customer.cust_no%type;
TYPE C_UCR_TYPE IS REF CURSOR;
c_cur C_UCR_TYPE;
BEGIN
case v_type
when 1
then
v_sql:='select t.cust_no from T01_CUST_IDENTIFY t where
t.cust_iden_type!=''01zz'' and t.cust_iden_type='||v_para2||' and
t.info_identify='||v_para1;
when 2
then
v_sql:='select t.cust_no from T01_CUST_IDENTIFY t where
t.cust_iden_type!=''01zz'' and
t.info_identify='||v_para1;
when 3
then
v_sql:='select t.cust_no from T01_CONTACT t where
t.contact_info='||v_para1;
end case;
open c_cur for v_sql;
LOOP
FETCH c_cur INTO
v_custno;
EXIT WHEN c_cur%NOTFOUND;
v_custno_tmp := v_custno_tmp||','||v_custno;
END LOOP;
close c_cur;
v_custno_tmp := substr(v_custno_tmp,2);
RETURN v_custno_tmp;
END GET_CUSTNO_GROUP;
二、网上针对一次返回结果的代码
一、针对多次返回结果解决方式
CREATE OR REPLACE FUNCTION GET_CUSTNO_GROUP(v_para1 in VARCHAR2,v_para2 in VARCHAR2,v_type in number)
RETURN VARCHAR2
IS
v_custno_tmp VARCHAR2(4000);
v_sql
v_custno t01_customer.cust_no%type;
TYPE C_UCR_TYPE IS REF CURSOR;
c_cur C_UCR_TYPE;
BEGIN
END GET_CUSTNO_GROUP;
二、网上针对一次返回结果的代码
--错误