- •Использование курсоров в PL/SQL
- •Задача, требующая применения курсора
- •Попытки решения
- •Попытки решения
- •Попытки решения
- •Курсор
- •Курсоры
- •Пример процедуры с явным курсором (1)
- •Пример процедуры с явным курсором (2)
- •Пример процедуры с явным курсором (3)
- •Объявление курсора в процедуре
- •Объявление курсора
- •Объявление курсора
- •Атрибуты курсора
- •Записи PL/SQL
- •Типы записей PL/SQL
- •Использование команд OPEN, FETCH и CLOSE
- •Использование команд OPEN, FETCH и CLOSE
- •Курсорный цикл FOR
- •Пример использования курсорного цикла (1)
- •Пример использования курсорного цикла (2)
- •Конструкция
- •Использование курсора для обновления записей (1)
- •Использование курсора для обновления записей (2)
Использование курсоров в PL/SQL
Понятие курсора Явные курсоры Курсорные циклы
Задача, требующая применения курсора
Записать в новую таблицу FEVRAL все заказы, сделанные в феврале 2009 г. Предварительно нужно создать новую пустую таблицу со структурой, аналогичной структуре таблицы Orders.
SELECT * FROM Orders
WHERE TRUNC (o_time) BETWEEN '01-FEB-2009' AND '28-FEB-2009';
Попытки решения
CREATE OR REPLACE PROCEDURE ord_fevr IS BEGIN
SELECT * FROM Orders
WHERE TRUNC (o_time)
BETWEEN '01-FEB-2009' AND '28-FEB-2009'; END ord_fevr;
/
Error(4,1): PLS-00428: an INTO clause is expected in this SELECT statement
Попытки решения
CREATE OR REPLACE PROCEDURE ORD_FEVR IS orderID NUMBER ;
userID NUMBER ; bookID NUMBER ; tim TIMESTAMP ; num NUMBER ;
BEGIN
SELECT * INTO orderID, userID, bookID, tim, num FROM Orders
WHERE TRUNC(o_time) BETWEEN '01-FEB-2009' AND '28-FEB-2009';
END ord_fevr;
Попытки решения
EXECUTE ord_fevr;
Курсор
Курсор (текущий набор записей) — важная конструкция PL/SQL, лежащая в основе взаимодействия PL/SQL и SQL.
Специальный элемент PL/SQL, с которым связан SQL-опе- ратор SELECT.
Объявляется в секции объявлений базового блока. Откры- вается командой OPEN, выборка строк осуществляется с помощью команды FETCH.
После завершения всей обработки закрывается командой CLOSE. Закрытие курсора освобождает системные ресурсы, которые использовались, пока он был открыт.
Курсоры
Для SQL-операторов, используемых в коде PL/SQL, применяются:
явные (explicit) курсоры (те, которым присвоено имя).
неявные или скрытые (implicit) курсоры.
Пример процедуры с явным курсором (1)
CREATE OR REPLACE PROCEDURE ord_fevr IS orderID NUMBER ;
userID NUMBER ; bookID NUMBER ; tim TIMESTAMP ; num NUMBER ;
CURSOR fev_cur IS
SELECT * FROM Orders
WHERE TRUNC (o_time)
BETWEEN '01-FEB-2009' AND '28-FEB-2009';
Пример процедуры с явным курсором (2)
BEGIN
OPEN fev_cur ;
FETCH fev_cur INTO orderID, userID, bookID, tim, num ; WHILE fev_cur%FOUND LOOP
dbms_output.put_line (orderID ||' '|| userID ||' '|| bookID || '
'|| tim ||' '|| num);
INSERT INTO fevral VALUES(orderID, userID, bookID, tim, num);
FETCH fev_cur INTO orderID, userID, bookID, tim, num; END LOOP;
CLOSE fev_cur; END ord_fevr;