У меня есть следующие функции PLSQL, которые возвращают следующую ошибку при возврате больших данных:
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.