суббота, 31 августа 2013 г.

Явные курсоры

Почему то сначала я решил рассказать про неявные курсоры, а потом — про явные. Даже часть статьи написал. Но потом — передумал. Надо же сначала показать все действия, которые происходят с курсором (в явном виде), и только потом — продолжать беседу на счет неявных курсоров. Так и сделаю.

Явный курсор — это всегда select, описанный в области объявления переменных программы на языке pl/sql. Для других инструкций DML создавать явные курсоры нельзя. Курсор — это запрос, объявленный как переменная. У явного курсора должно быть имя (как и у любой переменной).

Явные курсоры можно открывать (open), выбирать из них данных (fetch), закрывать курсоры (close). Использовать эти операции программист может тогда, когда ему захочется. Так как тема курсоров — обширная, то я приведу только небольшой практический пример, чтобы можно было в теме хоть чуть-чуть разобраться:

CREATE OR REPLACE PROCEDURE P_TestCursor IS
CURSOR TestCur IS
SELECT '1' one, '2' two
FROM dual
UNION ALL
SELECT '3' three, '4' four
FROM dual;
TestCurUse TestCur%ROWTYPE;
BEGIN
OPEN TestCur;
FETCH TestCur INTO TestCurUse;
dbms_output.put_line(TestCurUse.one || TestCurUse.two);
CLOSE TestCur;
END P_TestCursor;

Тут все просто и понятно. Во второй строке я объявляю курсор TestCur с запросом данных из дуала. В строке перед begin я объявил переменную TestCurUse и загрузил туда структуру курсора TestCur (чтобы можно было выгрузку данных производить в эту переменную, вот и структуры должны быть одинаковыми).

Потом я открываю курсор (open), выбираю из него данных в переменную TestCurUse (fetch), затем вывожу данные через dbms_output и, в самом конце — закрываю курсор (close). Результат работы процедуры будет вывод симолов 12 рядом (1 — из первого поля, 2 — из второго).

Есть несколько тонкостей при работе с курсорами. Во-первых, он выбирает только одну строку по умолчанию (остальные — только при обработке в цикле). Во-вторых, можно использовать в курсоре параметры. В-третьих, есть специальные атрибуты для явных курсоров (типа %ROWTYPE), которые помогают при работе с курсорами. И другие тонкости есть. Их описание — займет много времени, у меня такой цели нет, если вам надо — поищите в инете, такое описание легко найти. Я сегодня привел только основу — как вообще пользоваться явными курсорами.

Комментариев нет:

Отправить комментарий