Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
33
Добавлен:
17.04.2018
Размер:
75.26 Кб
Скачать

Записи pl/sql

Запись PL/SQL— это набор данных базовых типов. К ней можно обращаться, как к единому целому. Для доступа к отдельным полям записи применяется нотация имя_записи.имя_поля, которая уже использовалась для столбцов таблицы. Можно объявлять переменные, имеющие тип записи. Записи имеют один из трех типов, перечисленных ниже.

Основанные на таблице (table-based) Эти записи имеют поля, совпадающие по имени и типу со столбцами таблицы. Если курсор выбирает всю строку — например, оператором SELECT * FROM некоторая_таблица, — то возвращаемые им записи можно непосредственно копировать в переменную, имеющую тип записи, основанной на таблице некоторая_таблица.

Основанные на курсоре (cursor-based) Поля этих записей совпадают по имени, типу и порядку с заключительным списком столбцов в курсорном операторе SELECT.

Определенные программистом (programmer-defined) Это записи, тип которых определяет сам программист.

Использование команд open, fetch и close

Команды открытия курсора, выборки из курсора и закрытия курсора имеют следующий синтаксис:

OPEN имя_курсора;

FETCH имя_курсора INTO переменная_или_список_пвременных;

CLOSE имя_курсора;

После открытия курсор содержит набор записей, если в результате успешного выполнения оператора SELECT из базы данных были выбраны заданные строки. Каждая команда FETCH удаляет запись из открытого курсора и перемещает ее содержимое либо в переменную PL/SQL, тип записи которой совпадает с типом записи курсора, либо в группу переменных PL/SQL, где каждая переменная в списке совпадает по типу с соответствующим полем в записи курсора.

Перед тем как пытаться выбрать из курсора очередную запись, следует проверить с помощью атрибутов FOUND и NOTFOUND, есть ли в нем еще записи. Выборки из пустого курсора будут все время давать последнюю запись, не приводя к ошибке. Поэтому очень важно проверять атрибуты FOUND и NOTFOUND при использовании FETCH.

Фактическая обработка записей из курсора обычно выполняется внутри цикла. При написании такого цикла неплохо начать с проверки, была ли найдена запись в курсоре. Если да, можно продолжать необходимую обработку; в противном случае следует выйти из цикла. То же самое можно сделать более коротким путем, использовав курсорный цикл FOR. При этом PL/SQL будет осуществлять открытие, выборку и закрытие без дополнительного программирования.

Курсорный цикл for

Синтаксис курсорного цикла FOR имеет следующий вид:

FOR запись_курсора IN имя_курсора LOOP

операторы ;

END LOOP;

Этот цикл выбирает записи из курсора в переменную типа запись_курсора. Поля записи_курсора можно использовать для доступа к данным из операторов PL/SQL, выполняемых в цикле. Когда все записи выбраны, цикл завершается. Для удобства в курсорном цикле FOR открытие и закрытие курсора производится автоматически.

Попытка выбрать запись из неоткрытого курсора, приводит к сообщению invalid cursor (недействительный курсор). Если не закрывать курсоры, то в конце концов количество открытых курсоров достигнет максимальной величины, допускаемой системой. Неявные курсоры тоже вносят вклад в достижение этого предела.

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