У меня проблема с базой данных оракула, я создал хранимую процедуру и хотел передать массив идентификаторов элементов в эту процедуру, чтобы выбрать данные в соответствии с массивом элементов, используя предложение «in», доступное решение для этогоя обнаружил, что нужно создать функцию и передать строковое значение со всеми идентификаторами элементов, разделенными запятой, и эта функция будет возвращать таблицу данных со строкой для каждого идентификатора элемента. Этот подход работает хорошо, когда я пробую его в toad в selectоператор ,, но когда я использую его в хранимой процедуре, я получаю странную ошибку
"ORA-12714: указан неверный набор национальных символов"
после поиска причины этой ошибки, которую я нашелчто это ошибка в этой версии oracle согласно этой странице, и она была исправлена в патче oracle 10.2.0.4, и точная причина состоит в том, чтобы объявить курсор для функции, которая возвращает таблицу данных
.я не могу позволить пользователям, которые работают в рабочей среде, останавливать серверы для установки обновленийЯ хотел бы знать, может ли какой-нибудь эксперт Oracle помочь мне объявить курсор и вернуть его вместо возврата таблицы.
моя функция Oracle, спасибо заранее
create or replace
FUNCTION SplitIDs(
v_List IN VARCHAR2)
RETURN RtnValue_Set PIPELINED
AS
SWV_List VARCHAR2(2000);
v_RtnValue Dt_RtnValue := Dt_RtnValue(NULL);
BEGIN
SWV_List := v_List;
WHILE (instr(SWV_List,',') > 0)
LOOP
FOR RetRow IN
(SELECT ltrim(rtrim(SUBSTR(SWV_List,1,instr(SWV_List,',') -1))) SelectedValue
FROM dual
)
LOOP
v_RtnValue.SelectedValue := RetRow.SelectedValue;
PIPE ROW(v_RtnValue);
END LOOP;
SWV_List := SUBSTR(SWV_List,instr(SWV_List,',')+LENGTH(','),LENGTH(SWV_List));
END LOOP;
FOR RetRow IN
(SELECT ltrim(rtrim(SWV_List)) SelectedValue FROM dual
)
LOOP
v_RtnValue.SelectedValue := RetRow.SelectedValue;
PIPE ROW(v_RtnValue);
END LOOP;
RETURN;
END;