У меня есть домашнее задание, в котором я хочу использовать хранимую процедуру с курсорами для возврата запросов из нескольких таблиц. Запрос изменяется на основе входного значения, которое является числом, и запросы могут быть из отдельных таблиц или объединяются в несколько таблиц в зависимости от числа, которое выбирает пользователь, выполняющий блок anon. Я нашел прекрасный пример того, что мне нужно, в документах оракула онлайн, но в документах нет анонимного блока, который объясняет, как вызывается эта процедура.
Я выполнил поиск по переполнению стека, Google и моей книге plsql от Джоан Кастил, но большинство найденных мной блоков возвращают запросы только из одной таблицы. Я получил анонимный блок для выполнения с аналогичной процедурой, если он не запрашивает несколько таблиц, и мой блок anon запускался только тогда, когда он возвращал одну переменную, а не таблицу из нескольких столбцов.
Это код из документа оракула:
CREATE PACKAGE admin_data AS
TYPE gencurtyp IS REF CURSOR;
PROCEDURE open_cv (generic_cv IN OUT gencurtyp, choice INT);
END admin_data;
/
CREATE PACKAGE BODY admin_data AS
PROCEDURE open_cv (generic_cv IN OUT gencurtyp, choice INT) IS
BEGIN
IF choice = 1 THEN
OPEN generic_cv FOR SELECT * FROM employees;
ELSIF choice = 2 THEN
OPEN generic_cv FOR SELECT * FROM departments;
ELSIF choice = 3 THEN
OPEN generic_cv FOR SELECT * FROM jobs;
END IF;
END;
END admin_data;
/
Я бы опубликовал свое домашнее задание, но я думаю, что лучше понять пример и попытаться применить его. Как бы вы написали анонимный блок?