我有返回一个大的数据时,它返回下列错误以下PLSQL功能。甲骨文PLSQL函数抛出PL/SQL:数字或值错误:字符串缓冲区太小,用于返回大数据
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
修饰PLSQL功能
CREATE OR REPLACE FUNCTION FRDUSER.FRD_TELECOP_DYN_REP_SELECT_OPT (p_select IN VARCHAR2)
RETURN CLOB
AS
-- v_temp CLOB;
v_out CLOB;
TYPE RefCurTyp IS REF CURSOR;
-- len BINARY_INTEGER;
v_cursor RefCurTyp;
c_key VARCHAR2 (1000);
c_value VARCHAR2 (1000);
separator VARCHAR2(3);
BEGIN
OPEN v_cursor FOR p_select;
-- Fetch rows from result set one at a time:
separator := '';
LOOP
FETCH v_cursor INTO c_key,c_value;
EXIT WHEN v_cursor%NOTFOUND;
-- dbms_lob.createtemporary(v_out, TRUE);
-- dbms_lob.open(v_out, dbms_lob.lob_readwrite);
v_out := v_out || separator || c_key || ',' || c_value;
-- dbms_lob.append(v_out, v_temp);
separator := ':';
END LOOP;
-- Close cursor:
CLOSE v_cursor;
RETURN (v_out);
END;
/
我执行如下的功能,
SELECT CASE
WHEN OPTIONS_TYPE = 'S' THEN OPTIONS_VALUES
WHEN OPTIONS_TYPE = 'D' THEN TO_CLOB(FRD_TELECOP_DYN_REP_SELECT_OPT (OPTIONS_VALUES))
END
FROM FRD_REP_FW_REP_TEMPLATES A, FRD_REP_FW_TEMPLATES B
WHERE A.REP_ID=1123 AND A.TEMP_ID=B.TEMP_ID
ORDER BY A.REP_TEMP_ID ASC
,当我跑在上面的SQL查询它抛出以下错误 ORA-00932 :不一致的数据类型:预计CHAR得到CLOB
到SQL函数(options_values)该参数包含SQL查询。
确定。你能发布完整的错误堆栈,包括抛出错误的行号吗?你能指出你的代码的哪一行正在抛出错误吗?你能让我们知道你使用的是什么版本的Oracle吗? –
@Justin:对于修改的PLSQL,sql查询返回此错误(错误ORA-22835:缓冲区对于CLOB到CHAR或BLOB到RAW转换(实际:34743,最大值:4000)太小) –