Почему
то сначала я решил рассказать про неявные
курсоры, а потом — про явные. Даже часть
статьи написал. Но потом — передумал.
Надо же сначала показать все действия,
которые происходят с курсором (в явном
виде), и только потом — продолжать беседу
на счет неявных курсоров. Так и сделаю.
Явный
курсор — это всегда 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), которые
помогают при работе с курсорами. И другие
тонкости есть. Их описание — займет
много времени, у меня такой цели нет,
если вам надо — поищите в инете, такое
описание легко найти. Я сегодня привел
только основу — как вообще пользоваться
явными курсорами.
Комментариев нет:
Отправить комментарий