Результаты неявных курсоров в PL/SQL для Oracle Database 12c

Vovan_ST

Vovan_ST

ИТ специалист со стажем. Автор статьи. Профиль

неявные курсоры в PL/SQL для Oracle Database 12cЗнаете, чего я терпеть не могу? Когда разработчик утверждает, что Transact SQL лучше PL/SQL — и приводит некий аспект, который действительно лучше. Обычно я начинаю доказывать, что PL/SQL на голову выше Transact SQL... но в конце концов, у каждого языка есть свои сильные и слабые стороны, а в Transact SQL уже давно поддерживается возможность создания процедур, которые просто выводят стандарт результирующего набора на экран. В PL/SQL до недавнего времени приходилось писать запрос, перебирать результирующий набор и вызывать DBMS_OUTPUT.PUT_LINE для отображения результатов.

Однако теперь эта функциональность появилась и в PL/SQL. Это добавление ориен­тировано в первую очередь на разработчиков, переходящих с Transact SQL на PL/SQL (добро пожаловать!), а также предназначено для тестирования (стало намного проще написать короткую процедуру для вывода содержимого таблицы).

В Oracle данная возможность реализуется расширением функциональности пакета DBMS_SQL. Ура! Еще одна причина не отказываться от проверенного временем пакета (который во многом потерял актуальность из-за NDS).

Допустим, я хочу вывести фамилии всех работников заданного отдела. Для этого можно написать следующую процедуру:

CREATE OR REPLACE PROCEDURE show_emps (
   department_id_in IN employees.department_id%TYPE)
IS
   l_cursor SYS_REFCURSOR;
BEGIN
   OPEN l_cursor FOR
      SELECT last_name 
      FROM employees
      WHERE department_id = department_id_in ORDER BY last_name;
   DBMS_SQL.return_result (l_cursor);
END;
/

Если выполнить ее в SQL*Plus для отдела с идентификатором 20, получим:

BEGIN
   show_emps (20);
END;
/
PL/SQL procedure successfully completed.

ResultSet #1 

LAST NAME
----------
Fay
Hartstein

 

Вы также можете воспользоваться процедурой DBMS_SQL.GET_NEXT_RESULT для получения следующего результата, возвращаемого вызовом RETURN_RESULT, в программе PL/SQL (вместо того, чтобы передавать его во внешнюю среду).

Вас заинтересует / Intresting for you:

Управление приложениями PL/SQL...
Управление приложениями PL/SQL... 4651 просмотров Stas Belkov Thu, 16 Jul 2020, 06:20:48
Встроенные методы коллекций PL...
Встроенные методы коллекций PL... 14849 просмотров sepia Tue, 29 Oct 2019, 09:54:01
Тип данных RAW в PL/SQL
Тип данных RAW в PL/SQL 12352 просмотров Doctor Thu, 12 Jul 2018, 08:41:33
Использование записей (records...
Использование записей (records... 19760 просмотров Алексей Вятский Thu, 05 Jul 2018, 07:49:43
Войдите чтобы комментировать