Я работаю над процедурой, которая принимает большое количество входных данных, а затем возвращает заполненный курсор.Процедура будет вызываться из приложения Java.Да, это было бы легко создать как специальный запрос, но я пытаюсь использовать в своем коде только правильные вызовы функций / процедур.
Я буду передавать неизвестное количество параметров.Я решил эту проблему с помощью этого ответа , который предлагает новый тип.
Однако теперь я получаю ошибку " PL / SQL: ORA-00947: недостаточно значений " иЯ не могу понять проблему.Я знаю, что это касается подзапроса предложения where.
DESC BILINGUAL
Name Null Type
----------- -------- -------------
KEYFIELD NOT NULL VARCHAR2(16)
PURPOSE VARCHAR2(128)
CONTENTS_EN NOT NULL VARCHAR2(128)
CONTENTS_FR NOT NULL VARCHAR2(128)
Это пример того, как он будет использоваться и работает.
select keyfield, contents_en, contents_fr
from bilingual
where keyfield in ('1111', '1111A');
Вот процедура, которую я выполняюнаписание.
CREATE OR REPLACE TYPE STRING_TABLE AS TABLE OF VARCHAR2(16);
CREATE OR REPLACE PROCEDURE DOCSADM.BILINGUAL_VALUES (
IN_KEYS string_table,
CUR OUT SYS_REFCURSOR) AS
BEGIN
SELECT KEYFIELD, CONTENTS_EN, CONTENTS_FR
INTO CUR
FROM BILINGUAL
WHERE KEYFIELD IN (SELECT column_value FROM TABLE(IN_KEYS));
END BILINGUAL_VALUES;