Опубликован: 02.08.2007 | Доступ: свободный | Студентов: 3126 / 427 | Оценка: 4.55 / 4.39 | Длительность: 27:09:00
ISBN: 978-5-9556-0111-3
Лекция 12:

Разработка серверного кода

Курсоры PL/SQL

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

Рассмотрим пример доступа к информации, которая хранится в базе данных, с использованием курсоров.

Пусть в базе данных есть таблица базы данных с именем T01, такая, как показана ниже.

A1 number 1 2 3
A2 varchar2(5) abc cba bca
A3 char(1) A B C

Опишем курсор для доступа к данным таблицы Т01.

CURSOR cur01 IS SELECT * FROM T01;

Работа с курсором выполняется по следующему алгоритму:

  1. Открываем курсор:
    OPEN cur01;
  2. Выбираем данные из курсора в набор совместимых по типу переменных командой FETCH:
    FETCH cur01 INTO x1,x2,x3;
  3. Обрабатываем полученные данные.
  4. Выполняем команду FETCH для получения данных из следующей строки результирующей таблицы запроса.

И т.д.

В PL/SQL для курсоров предусмотрено несколько методов. Метод %NOTFOUND возвращает булевское истинное значение, если выборка в курсор пуста. Метод %FOUND возвращает булевское истинное значение, если выборка в курсор непуста. После открытия курсора до первой команды FETCH значения, возвращаемые этими методами, равны NULL. Метод %ROWCOUNT возвращает число строк в выборке после открытия курсора.

Предопределенный в PL/SQL метод %TYPE позволяет определить тип переменной как совпадающий с типом переменной таблицы.

PL/SQL поддерживает тип данных RECORD, который позволяет создать объект, соответствующий строке таблицы, как показано в примере ниже.

DECLARE TYPE t01_rec_type IS RECORD
( x1 t01.A1%TYPE,
x2 t01.A2%TYPE,
x3 t01.A3%TYPE);
t01_rec t01_rec_type;
…
FETCH cur1 INTO t01_rec;
DBMS_OUTPUT.PUT_LINE (cur1%ROWCOUNT||' '||t01_rec.x2);
ѕ.

Обработка исключительных ситуаций в PL/SQL

Исключительная ситуация - это возникновение предопределенного и описанного события в системе. Например, ошибки преобразования типов переменных или переполнения при делении на нуль. Пример некоторых предопределенных ситуаций, распознаваемых в PL/SQL, приведен в таблице 12.1 ниже. Для получения полного списка таких ситуаций следует обратиться к документации по PL/SQL.

Таблица 12.1. Описание некоторых исключительных ситуаций
LOGIN_DENID Неуспешное подключение к серверу
NOT_LOGGED_ON Попытка выполнить действие без подключения к серверу
INVALID_CURSOR Ссылка на недопустимый курсор или недопустимая операция с курсором
NO_DATA_FOUND Не найдены данные, соответствующие команде SELECT INTO
DUP_VAL_ON_INDEX Попытка вставить дубликат значения в колонку с ограничением на уникальное значение
VALUE_ERROR Арифметическая ошибка, ошибка усечения или преобразования
Александра Каева
Александра Каева
Михаил Забелкин
Михаил Забелкин
Антон Свистельников
Антон Свистельников
Россия, г. Москва