Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
кожин / Лекции / Лекция 06 select.doc
Скачиваний:
31
Добавлен:
20.03.2016
Размер:
172.03 Кб
Скачать
    1. Курсоры

      1. Види курсоров

Курсор - это конструкция языка SQL, предназначенная для связи между результатом запроса, который возвращает некоторое множество данных (обычно более одной записи), и программой на PL/SQL (или, в общем случае, прикладной программой), которая должна обрабатывать результаты этого запроса по одной записи. Курсор преобразует результат в набор записей, по которым можно перемещаться в цикле в программе.

Различают явные и неявные курсоры.

Явные курсоры программист объявляет сам, неявные курсоры связываются с каждым SQL-запросом.

Курсор является общим понятием, не ограниченным языком PL/SQL - во всех

Вот обычная последовательность действий для работы с курсором:

1) объявить его в разделе объявлений CURSOR имя-курсора IS запрос;

2) открыть его с помощью OPEN имя-курсора;

3) используя цикл, считать данные с помощью оператора FETCH (или воспользоваться специальной формой цикла FOR);

4) закрыть курсор по CLOSE имя-курсора.

      1. Объявление курсора.

Перед тем, как курсор использовать, его нужно объявить в разделе объявлений:

DECLARE

CURSORимя-курсора [(параметры)]IS

SELECT-оператор [FOR UPDATE NOWAIT];

SELECT-оператор определяет запрос, на основании которого получаются данные, по которым мы перемещаемся курсором. В данном операторе допустимо ORDER BY, в этом случае набор данных будет отсортирован.

В SELECT-операторе для курсора допускается использование переменных PL/SQL, выражений, допустимых в PL/SQL и вызов функций. Следует иметь в виду, что если в операторе используется колонка таблицы и переменная с одним и тем же именем, приоритет будет иметь колонка таблицы. Для разрешения этого конфликта проще всего переименовать переменную. Параметры курсора разделяются запятыми и доступны по имени внутри курсора в операторе SELECT. Задаются аргументы для этих параметров при открытии курсора с помощью OPEN. Параметры указываются вместе с типами.

Для параметров допускаются значения по умолчанию.

FOR UPDATE означает, что курсор предназначается для того, чтобы через него изменять записи и поставит блокировку. NOWAIT означает, что курсор не будет ждать, пока освободится ресурс, который нужно заблокировать, а сразу же вернет управление (с индикацией ошибки).

Пример курсора без параметров:

DECLARE

CURSOR emp_cursor IS SELECT * FROM Employee;

Пример курсора с параметрами (один параметр типа INT):

DECLARE

CURSOR emp1_cursor (min_emp_id INT) IS

SELECT * FROM Employee WHERE emp_id > min_emp_id;

Пример курсора с использованием переменной PL/SQL:

DECLARE

future_bonus NUMBER := 100;

CURSOR emp_cur IS

SELECT salary+future_bonus new_salary FROM Employee;

Перемещение по записям в курсоре в Oracle может осуществляться только в одну строну по набору данных - от начала в конец и если требуется вернуться назад, нужно открывать курсор заново. Такой курсор называется нескроллируемым.

      1. Открытие курсора

Объявление курсора сходно с описанием типа - оно задает формат получаемых данных, но для того, чтобы действительно получить эти данные, курсор необходимо открыть.

Для того, чтобы открыть курсор, необходимо выполнить оператор

OPEN имя-курсора[(аргументы)];

При этом курсор будет установлен перед первой записью набора. Для того, чтобы получить реальные данные, необходимо использовать FETCH.

Пример

OPEN emp_cursor;

откроет предварительно объявленный курсор emp_cursor.

OPEN emp1_cursor(101);

откроет курсор emp1_cursor и передаст ему в качестве параметра 101.

Один раз объявленный курсор может быть открыт много раз, но его нужно каждый раз перед этим закрывать - при попытке открыть уже открытый курсор получится ошибка.

Соседние файлы в папке Лекции