
- •Глава 2 Базовые понятия реляционной модели данных 21
- •Глава 3. Целостность реляционных данных 28
- •Глава 4. Реляционная алгебра 39
- •Глава 6. Нормальные формы отношений 57
- •Глава 7 Нормальные формы более высоких порядков 74
- •Глава 8. Элементы модели «сущность-связь» 83
- •Глава 5. Элементы языка sql 110
- •Ранние подходы к организации бд. Системы, основанные на инвертированных списках, иерархические и сетевые субд. Примеры. Сильные места и недостатки ранних систем
- •Основные особенности систем, основанных на инвертированных списках
- •Структуры данных
- •Манипулирование данными
- •Ограничения целостности
- •Иерархические системы
- •Иерархические структуры данных
- •Манипулирование данными
- •Ограничения целостности
- •Сетевые системы
- •Сетевые структуры данных
- •Манипулирование данными
- •Ограничения целостности
- •Достоинства и недостатки
- •Элементы теории множеств Множества
- •Операции над множествами
- •Декартово произведение множеств
- •Отношение
- •Примеры отношений Бинарные отношения (отношения степени 2)
- •Отношение эквивалентности
- •Отношения порядка
- •Функциональное отношение
- •Еще пример бинарного отношения
- •Транзитивное замыкание отношений
- •Глава 2 Базовые понятия реляционной модели данных Общая характеристика реляционной модели данных
- •Типы данных
- •Простые типы данных
- •Структурированные типы данных
- •Ссылочные типы данных
- •Типы данных, используемые в реляционной модели
- •Отношения, атрибуты, кортежи отношения Определения и примеры
- •Свойства отношений
- •Первая нормальная форма
- •Глава 3. Целостность реляционных данных
- •Null-значения
- •Трехзначная логика (3vl)
- •Потенциальные ключи
- •Целостность сущностей
- •Внешние ключи
- •Целостность внешних ключей
- •Замечания к правилам целостности сущностей и внешних ключей
- •Операции, могущие нарушить ссылочную целостность
- •Для родительского отношения
- •Для дочернего отношения
- •Стратегии поддержания ссылочной целостности
- •Применение стратегий поддержания ссылочной целостности
- •При обновлении кортежа в родительском отношении
- •При удалении кортежа в родительском отношении
- •При вставке кортежа в дочернее отношение
- •При обновлении кортежа в дочернем отношении
- •Глава 4. Реляционная алгебра Обзор реляционной алгебры
- •Замкнутость реляционной алгебры
- •Отношения, совместимые по типу
- •Оператор переименования атрибутов
- •Теоретико-множественные операторы Объединение
- •Пересечение
- •Вычитание
- •Декартово произведение
- •Специальные реляционные операторы Выборка (ограничение, селекция)
- •Проекция
- •Соединение
- •Общая операция соединения
- •Тэта-соединение
- •Экви-соединение
- •Естественное соединение
- •Деление
- •Примеры использования реляционных операторов
- •Невыразимость транзитивного замыкания реляционными операторами
- •Кросс-таблицы
- •Реляционное исчисление
- •Кортежные переменные и правильно построенные формулы
- •Целевые списки и выражения реляционного исчисления
- •Реляционное исчисление доменов
- •Глава 6. Нормальные формы отношений Этапы разработки базы данных
- •Критерии оценки качества логической модели данных
- •Адекватность базы данных предметной области
- •Легкость разработки и сопровождения базы данных
- •Скорость операций обновления данных (вставка, обновление, удаление)
- •Скорость операций выборки данных
- •Основной пример
- •1Нф (Первая Нормальная Форма)
- •Аномалии обновления
- •Аномалии вставки (insert)
- •Аномалии обновления (update)
- •Аномалии удаления (delete)
- •Функциональные зависимости
- •Определение функциональной зависимости
- •Функциональные зависимости отношений и математическое понятие функциональной зависимости
- •2Нф (Вторая Нормальная Форма)
- •Анализ декомпозированных отношений
- •Оставшиеся аномалии вставки (insert)
- •Оставшиеся аномалии обновления (update)
- •Оставшиеся аномалии удаления (delete)
- •3Нф (Третья Нормальная Форма)
- •Алгоритм нормализации (приведение к 3нф)
- •Анализ критериев для нормализованных и ненормализованных моделей данных Сравнение нормализованных и ненормализованных моделей
- •Oltp и olap-системы
- •Корректность процедуры нормализации – декомпозиция без потерь. Теорема Хеза
- •Глава 7 Нормальные формы более высоких порядков
- •Нфбк (Нормальная Форма Бойса-Кодда)
- •4Нф (Четвертая Нормальная Форма)
- •5Нф (Пятая Нормальная Форма)
- •Продолжение алгоритма нормализации (приведение к 5нф)
- •Глава 8. Элементы модели «сущность-связь»
- •Основные понятия er-диаграмм
- •Нормальные формы er-схем
- •Более сложные элементы er-модели
- •Получение реляционной схемы из er-схемы
- •Пример разработки простой er-модели
- •Концептуальные и физические er-модели
- •Внутренняя организация реляционных субд Cтруктуры внешней памяти, методы организации индексов
- •Хранение отношений
- •Индексы
- •Хэширование
- •Журнальная информация
- •Служебная информация
- •Управление транзакциями, сериализация транзакций
- •Транзакции и целостность баз данных
- •Изолированность пользователей
- •Сериализация транзакций
- •Методы сериализации транзакций
- •Синхронизационные захваты
- •Гранулированные синхронизационные захваты
- •Предикатные синхронизационные захваты
- •Тупики, распознавание и разрушение
- •Метод временных меток
- •Журнализация изменений бд
- •Журнализация и буферизация
- •Индивидуальный откат транзакции
- •Восстановление после мягкого сбоя
- •Физическая согласованность базы данных
- •Восстановление после жесткого сбоя
- •Глава 5. Элементы языка sql
- •Предварительные сведения о работе с sql сервером.
- •InterBase сервер
- •Выполнение в ibConsole
- •Р егистрация псевдонима (алиаса).
- •Пользователи.
- •С оздание модельных бд.
- •Сеанс sql
- •Структура учебных баз данных
- •Операторы sql
- •Операторы ddl (Data Definition Language) - операторы определения объектов базы данных
- •Операторы dml (Data Manipulation Language) - операторы манипулирования данными
- •Операторы dql (Data Query Language) – операторы запросов к данным
- •Операторы dcl (Data Control Language) - защиты и управления данными
- •Основные типы данных
- •Строки фиксированной длины
- •Строки переменной длины
- •Числовые значения
- •Десятичные значения
- •Десятичные значения с плавающей точкой
- •Значения даты и времени
- •Буквальные значения
- •Значения null
- •Значения типа boolean
- •Пользовательские типы данных
- •Типы данных InterBase
- •Управление объектами базы данных
- •Что такое объекты базы данных?
- •Что такое схема?
- •Поля и столбцы
- •Оператор create database
- •Синтаксис
- •Примеры
- •Оператор create table
- •Синтаксис
- •Примеры
- •Ключевое слово storage (в InterBase не действует!)
- •Соглашения о присвоении имен
- •Команда alter table
- •Синтаксис
- •Примеры
- •Модификация элементов таблицы
- •Добавление столбцов, требующих обязательного ввода данных
- •Пример:
- •Изменение столбцов
- •Создание таблицы на основе уже существующей
- •Удаление таблиц
- •Условия целостности
- •Ключевые поля
- •Требования уникальности
- •Внешние ключи
- •Атрибут not null
- •Использование условий проверки
- •Удаление условий
- •Определение представлений
- •Оператор create view (InterBase) Описание
- •Синтаксис
- •Примеры
- •Определение привилегий
- •Оператор grant (InterBase) Описание
- •Синтаксис
- •Примеры
- •Вопросы и ответы
- •Практикум
- •Примеры
- •Манипуляция данными
- •Обзор возможностей манипуляции данными
- •Заполнение таблиц новыми данными
- •Ввод данных в таблицу
- •Ввод данных в определенные столбцы таблицы
- •Ввод данных из другой таблицы
- •Ввод значений null
- •Обновление уже имеющихся данных
- •Обновление значений одного столбца
- •Обновление нескольких столбцов в одной или нескольких записях
- •Удаление данных из таблиц
- •Примеры использования операторов манипулирования данными
- •Знакомство с запросами
- •Что такое запрос?
- •Оператор select
- •Синтаксис оператора выборки данных (select)
- •Синтаксис оператора выборки
- •Синтаксис
- •Примеры
- •Ключевое слово select
- •Ключевое слово from
- •Использование условий для отбора данных
- •Сортировка вывода
- •Учет регистра символов
- •Примеры простых запросов
- •Подсчет записей в таблице
- •Получение данных из таблиц других пользователей
- •Псевдонимы столбцов
- •Упражнения
- •Операции в условиях для отбора данных
- •Что такое операции в sql?
- •Операции сравнения
- •Равенство
- •Неравенство
- •«Меньше» и «больше»
- •Примеры комбинирования операций сравнения
- •Логические операции
- •Использование операторов exists, any, all, и some Описание учебной базы данных
- •Операции конъюнкции и дизъюнкции
- •Отрицание условий с помощью операции отрицания
- •Неравенство
- •Деление
- •Комбинирование арифметических операций
- •Вопросы и ответы
- •Подведение итогов по данным запроса
- •Что такое итоговые функции?
- •Функция count
- •Функция sum
- •Функция avg
- •Функция max
- •Функция min
- •Описание
- •Синтаксис
- •Примеры
- •Описание
- •Примеры
- •Описание
- •Синтаксис
- •Примеры
- •Описание
- •Синтаксис
- •Примеры
- •Описание
- •Синтаксис
- •Примеры
- •Сортировка и группирование данных
- •Зачем группировать данные?
- •Ключевое слово group by
- •Группирование выбранных данных
- •Создание групп и использование итоговых функций
- •Представление имен столбцов числами
- •Ключевое слово having
- •Объединение таблиц в запросах
- •Отбор данных из нескольких таблиц
- •Типы связывания
- •Компоненты условия связывания
- •Связывание по равенству
- •Естественное связывание
- •Использование псевдонимов для имен таблиц
- •Связывание по неравенству
- •Внешнее связывание
- •Рекурсивное связывание
- •Связывание по нескольким ключам
- •Вопросы связывания
- •Использование связующей таблицы
- •Декартово произведение
- •Вопросы и ответы
- •Практикум
- •Упражнения
- •Использование подзапросов
- •Что такое подзапрос?
- •Подзапросы в операторе select
- •Подзапросы в операторе insert
- •Подзапросы в операторе update
- •Подзапросы в операторе delete
- •Подзапросы внутри подзапросов
- •Связанные подзапросы
- •Объединение запросов
- •Обычные и составные запросы
- •Зачем использовать составные запросы?
- •Команды построения сложных запросов
- •Команда union
- •Команда union all
- •Команда intersect
- •Команда except
- •Использование order by в составных запросах
- •Использование group by в составных запросах
- •Обеспечение правильности результатов
- •Примеры использования оператора select
- •Отбор данных из одной таблицы
- •Отбор данных из нескольких таблиц
- •Использование имен корреляции (алиасов, псевдонимов)
- •Использование агрегатных функций в запросах
- •Использование агрегатных функций с группировками
- •Использование подзапросов
- •Использование объединения, пересечения и разности
- •Синтаксис соединенных таблиц
- •Синтаксис условных выражений раздела where
- •Порядок выполнения оператора select
- •Стадия 1. Выполнение одиночного оператора select
- •Стадия 2. Выполнение операций union, except, intersect
- •Стадия 3. Упорядочение результата
- •Как на самом деле выполняется оператор select
- •Оператор соединения
- •Оператор пересечения
- •Оператор деления
- •Использование индексов для ускорения поиска данных
- •Что такое индекс?
- •Принцип работы индексов
- •Команда create index
- •Типы индексов
- •Простые индексы
- •Уникальные индексы
- •Составные индексы
- •Простые и составные индексы
- •Неявные индексы
- •Когда следует создавать индекс?
- •Когда не следует создавать индекс?
- •Удаление индексов
- •Повышение эффективности работы с базой данных
- •Что означает оптимизация операторов sql?
- •Оптимизация базы данных и оптимизация операторов sql
- •Форматирование операторов sql
- •Форматирование операторов для лучшего восприятия
- •Правильный порядок таблиц в выражении from
- •Правильный порядок условий связывания
- •Наиболее ограничительное условие
- •Полное сканирование таблиц
- •Когда и как избегать полного сканирования таблиц
- •Другие аспекты оптимизации
- •Использование like и знаков подстановки
- •Замена операций or выражением с ключевым словом in
- •Недостатки использования выражения с ключевым словом having
- •Долгие операции сортировки
- •Использование готовых процедур
- •Отмена использования индексов в больших пакетных операциях
- •Средства для анализа производительности
- •Создание и использование представлений и синонимов
- •Что такое представление?
- •Использование представлений для защиты данных
- •Использование представлений для управления выводом данных
- •Хранение представлений
- •Создание представлений
- •Создание представления для данных одной таблицы
- •Создание представления для данных нескольких таблиц
- •Создание представления на основе другого представления
- •Уровни зависимости представлений
- •Опция with check option
- •Опции cascaded и local
- •Синтаксис
- •Примеры
- •Обновление данных представления
- •Представления и выражение order by
- •Удаление представлений
- •Что такое синонимы? (InterBase не поддержвается)
- •Управление синонимами
- •Создание синонимов
- •Удаление синонимов
- •Триггеры и хранимые процедуры (InterBase) sql для триггеров и хранимых процедур в InterBase
- •Обработка исключений
- •Обработка ошибок sql
- •Обработка ошибок InterBase
- •Комментарий
- •Триггеры и их назначение
- •Синтаксис create trigger
- •Примеры
- •Дополнительные сведения по работе с генераторами
- •Хранимые процедуры и их назначение
- •Процедуры для работы с датой и временем
Триггеры и хранимые процедуры (InterBase) sql для триггеров и хранимых процедур в InterBase
SQL для триггеров и хранимых процедур в InterBase представляет собой законченный язык программирования для манипулирования данными.
Язык включает:
инструкции манипуляции данных SQL: добавление, модификация, удаление из базы, выборка данных из базы в список переменных.
операторы SQL и выражения, включая функции пользователя (UDF – user defined functions), расширение SQL, включающее оператор присвоения, операторы управления последовательностью вычислений, возможность использования собственных и контекстных переменных, операторы генерации событий и исключений (ошибок), а также команды обработки ошибок.
При работе с данными используются следующие операции (перечень дан в порядке убывания их приоритета):
операция конкатенации (объединения) для строковых данных – "||"
арифметические операции
* / + –
операции сравнения
=, ==
<>, !=, ~=, ^= (не равно)
>, <, >=, <=, !>, ~>, ^> (не больше), !<, ~<, ^< (не меньше)
логические операции
NOT, AND, OR
Хотя хранимые процедуры и триггеры используются различным образом и в разных целях, они базируются на одном и том же языке. И хранимые процедуры, и триггеры могут использовать любые конструкции языка, за исключением следующих:
Контекстные переменные допустимы только в триггерах.
Входные и выходные параметры, а также инструкции SUSPEND и EXIT, которые возвращают значения, применимы только в хранимых процедурах.
Прежде чем продолжить, уточним терминологию.
Оператор DECLARE – это оператор объявления переменных.
Блок (<block>) – это один или несколько операторов (<compound_statement>), заключенных в операторные скобки BEGIN END.
Оператор (<compound_statement>) – это простой оператор (statement) или блок.
Формализованная запись:
< block> ::= BEGIN
< compound_statement>
[< compound_statement> ...] END
< compound_statement> ::= {< block> | statement;}
Простые операторы: оператор присвоения, оператор генерации исключения, оператор вызова процедуры, оператор ветвления IF, оператор цикла FOR, оператор цикла WHILE, оператор генерации события POST_EVENT, операторы SQL INSERT, UPDATE, SELECT, оператор возврата значений выходных параметров SUSPEND, оператор прерывания процедуры EXIT, оператор обработки ошибок WHEN.
Кроме того, для удобства сопровождения программ в их текст могут быть внесены комментарии.
Рассмотрим подробнее перечисленные операторы.
ОПЕРАТОР ПРИСВОЕНИЯ
Синтаксис:
variable = < expression>;
variable – локальная переменная, входной или выходной параметр, контекстная переменная.
<expression> – любое допустимое в SQL выражение, включающее переменные, операторы SQL, пользовательские (UDF) функции и генераторы, выражения в скобках.
ОПЕРАТОР ОБЪЯВЛЕНИЯ ПЕРЕМЕННЫХ DECLARE
Оператор DECLARE применяется в хранимых процедурах и триггерах и размещается в начале их тела непосредственно перед скобкой BEGIN, за которой размещаются все исполнимые операторы. Все используемые переменные должны быть объявлены. Оператор объявления завершается «;». Одним оператором может быть объявлена только одна переменная, и объявления имеют смысл только внутри хранимой процедуры или триггера.
Синтаксис:
DECLARE VARIABLE var datatype;
ОПЕРАТОР ГЕНЕРАЦИИ ИСКЛЮЧЕНИЯ
Генерирует сообщение об ошибке (исключение). Применяется в хранимых процедурах и триггерах.
Синтаксис:
EXCEPTION name;
name – имя генерируемого исключения. Исключение с данным именем должно быть предварительно создано в базе командой CREATE EXCEPTION.
CREATE EXCEPTION
Описание
CREATE EXCEPTION создает исключительную ситуацию, определенную пользователем ошибку, с которой ассоциировано сообщение. Исключительные ситуации могут быть подняты в триггерах и сохраненных процедурах.
Исключительные ситуации глобальны для базы данных. То же самое сообщение или набор сообщений доступно всем сохраненным процедурам и триггерам в приложении. Для примера, база данных может иметь English и French версии тех же самых сообщений исключительных ситуаций и использовать соответствующий набор по необходимости.
Когда исключительная ситуация поднята триггером или сохраненной процедурой, она:
Завершает триггер или процедуру, которой она вызвана и отменяет любые, выполненные ими действия (прямо или косвенно).
Выводит сообщение об ошибке.
Исключительные ситуации могут быть отслежены и обработаны в сохраненной процедуре или триггере с помощью инструкции WHEN.
Синтаксис
CREATE EXCEPTION name "<message>";
Аргумент |
Описание |
|
name |
Имя, которое ассоциировано с сообщением исключительной ситуации. Должно быть уникальным среди имен исключительных ситуаций в базе данных. |
|
"<message>" |
Строка, заключенная в кавычки, содержащая буквенно-цифровые символы и знаки пунктуации. Максимальная длина: 78 символов. |
|
Примеры
Следующая инструкция создает UNKNOWN_EMP_ID исключительную ситуацию:
CREATE EXCEPTION UNKNOWN_EMP_ID "Invalid employee number or project id.";
Следующий фрагмент из сохраненной процедуры поднимает, предварительно установленную исключительную ситуацию, когда SQLCODE принимает значение -530, которое является нарушением ограничения FOREIGN KEY:
...
WHEN SQLCODE -530 DO
EXCEPTION UNKNOWN_EMP_ID;
...
ОПЕРАТОР ВЫЗОВА ПРОЦЕДУРЫ
Оператор осуществляет вызов хранимой процедуры. Применяется в хранимых процедурах и триггерах.
Синтаксис:
EXECUTE PROCEDURE name [LIST_: param] [RETURNING_VALUES LIST_:param];
name – имя вызываемой процедуры. Сама процедура должна быть предварительно создана в базе командой CREATE PROCEDURE.
LIST_: param ::=:param [, LIST_: param], заданный после имени процедуры name – это список входных параметров процедуры (если процедура не требует параметров, то может отсутствовать). Отдельные параметры могут быть константами или переменными. Перед именем переменной ставится «:», кроме случаев использования контекстных переменных NEW и OLD.
LIST_:param, заданный после RETURNING_VALUES – список возвращаемых процедурой значений (если процедура возвращает значения). Перед именем возвращаемых значений ставится «:». В триггерах и процедурах использование вызовов других процедур аналогично использованию подпрограмм в традиционных алгоритмических языках.
Замечание. При вызове из ISQL или прикладных программ на базовых языках синтаксис вызова отличается от приведенного.
ОПЕРАТОР ВЕТВЛЕНИЯ
Оператор ветвления IF ... THEN ... ELSE обеспечивает выполнение того или иного действия в зависимости от истинности проверяемого условия.
Синтаксис:
IF ( <condition>) THEN <compound_statement> [ELSE <compound_statement>]
<compound_statement> ::= {< block> | statement;} (см. выше)
<condition> – выражение, которое может принимать значение истина или ложь.
Если условие выполнено (значение TRUE), то выполняется оператор, следующий за конструкцией THEN, иначе выполняется оператор, следующий за конструкцией ELSE, если она присутствует.
Например:
IF (a<0) THEN
b = -а; ELSE
b = а;
Оператор цикла FOR
Цикл FOR обеспечивает выполнение заданного оператора для каждой строки команды SELECT. Цикл FOR может использоваться в хранимых процедурах и триггерах.
Синтаксис:
FOR
< select_expr> DO
< compound_statement>
FOR SELECT – инструкция цикла, которая отыскивает строку, указанную в <select_expr> и для каждой строки исполняет оператор или блок, указанный после ключевого слова DO.
Конструкция <select_expr> представляет собой обычную команду SELECT, к которой добавлена обязательная здесь опция INTO и которая должна быть последней опцией команды SELECT.
В опции INTO перечисляются имена локальных переменных или параметров процедуры, которым присваиваются соответствующие значения выбранных командой SELECT столбцов. Имена переменных должны предваряться символом":".
В качестве примера возьмем фрагмент процедуры PAUTHOR.
FOR SELECT AUTHOR, AUNAME FROM TAUTHOR
INTO :AUTHOR, :AUNAME DO
IF(AUNAME>P1) THEN IF(AUNAME<P2) THEN SUSPEND;
Здесь оператор SUSPEND обеспечивает передачу вызывающему приложению данных, удовлетворяющих дополнительному условию.
ОПЕРАТОР ЦИКЛА WHILE
Оператор цикла WHILE обеспечивает выполнение оператора, указанного после ключевого слова DO пока указанное после WHILE условие истинно. Цикл WHILE может использоваться в хранимых процедурах и триггерах.
Синтаксис:
while ( <condition>) DO <compound_statement>
WHILE ... DO – оператор выполнения цикла, который повторяет оператор или блок <compound_statement>, указанный после DO, пока условие <condition> истинно. Условие проверяется в начале каждого цикла. В качестве примера рассмотрим вычисление факториала.
S = 1;
WHILE (I > 0) DO
BEGIN
S = S * I;
I = I - 1;
END
ОПЕРАТОР ГЕНЕРАЦИИ СОБЫТИЯ POST_EVENT
Оператор POST_EVENT используется для генерации события, которое может быть в дальнейшем обработано в приложениях.
Сама обработка событий в InterBase строится по следующей схеме.
Приложение выдает команду EVENT INIT request_name (event_namel [, event_name2 ...]);
По этой команде создается список событий request_name, содержащий имена событий event_namel ,event_name2 ...
То же или другое приложение выдает команду EVENT WAIT request_name;
По этой команде приложение приостанавливается и ожидает наступления одного из событий в списке request_name.
Само событие генерируется внутри триггера или хранимой процедуры командой POST_EVENT. После того как такое событие произошло, приложение, ожидающее событие, получает соответствующее сообщение и продолжает свою работу. Такой механизм позволяет приложениям обрабатывать различные специфические ситуации при работе с базой данных.
Внутри триггеров и хранимых процедур реализуется только команда POST_EVENT.
Синтаксис:
POST_EVENT <event_name>;
Параметр <event_name> может быть либо символьным литералом в кавычках, либо строковой переменной.
Замечание. Имена переменных в хранимых процедурах не должны предваряться символом ":" нигде, кроме как в командах SELECT, INSERT, UPDATE, DELETE, что позволяет отличать их от имен столбцов.
При выполнении процедуры команда POST_EVENT сообщает диспетчеру событий о наступлении события. Диспетчер событий следит за приложениями, ждущими событий, и извещает об их наступлении.
post_event "Oh_oh_oh" ;
или
ABC = "Oh_oh_oh"; POST_EVENT ABC;
ОПЕРАТОРЫ SQL INSERT, UPDATE, SELECT, DELETE
Внутри хранимых процедур и триггеров могут использоваться стандартные команды SQL: INSERT, UPDATE, SELECT, DELETE. Единственной особенностью этих команд внутри процедур и триггеров является то, что в них могут использоваться в качестве параметров локальные переменные процедур. Для того чтобы отличать локальные переменные от столбцов таблиц в командах INSERT, UPDATE, SELECT, DELETE, имена локальных переменных предваряются символом ":".
Кроме того, для помещения результатов выборки в локальные переменные к команде SELECT добавляется опция INTO : var [,: var ...].
ОПЕРАТОР ВОЗВРАТА ЗНАЧЕНИЙ ВЫХОДНЫХ ПАРАМЕТРОВ SUSPEND
Оператор SUSPEND предназначен для использования в хранимых процедурах (в триггерах SUSPEND неприменим), причем только в процедурах выбора, хотя синтаксически допустим и в выполнимых процедурах.
Оператор SUSPEND приостанавливает выполнение процедуры выбора, возвращает управление вызвавшей программе и возобновляет работу со следующей команды, когда выполнена очередная команда FETCH. SUSPEND возвращает вызвавшей программе результаты работы процедуры в выходных параметрах.
SUSPEND не должен использоваться в выполнимых процедурах, так как команды, следующие за ним, никогда не будут выполнены. В выполнимых процедурах следует использовать оператор явного выхода EXIT.
В процедуре выбора команда SUSPEND возвращает текущие значения выходных параметров вызвавшей программе и продолжает выполнение. Если какой-либо выходной параметр не получил значение явно, то его содержимое непредсказуемо, что может привести к ошибкам, поэтому процедура должна обязательно присваивать значения всем выходным параметрам перед выполнением SUSPEND.
ОПЕРАТОР ПРЕРЫВАНИЯ ПРОЦЕДУРЫ EXIT
И в процедурах выбора и в выполнимых процедурах оператор EXIT передает управление на конец процедуры (завершающий END).
Действие, выполняемое по достижении конца процедуры, зависит от ее типа:
В процедуре выбора конечная команда END возвращает управление вызвавшему ее приложению и устанавливает SQLCODE в 100; это указывает, что список найденных ею строк закончен.
В выполнимой процедуре конечная команда END возвращает управление вызвавшему ее приложению с установкой значений выходных параметров, если они есть.
Сводка результатов выполнения операторов SUSPEND, EXIT и END приведена в таблице.
Тип процедуры |
SUSPEND |
EXIT |
END |
Процедура выбора
|
Приостанавливает работу до выполнения очередной команды FETCH и возвращает значения выходных параметров |
Переходит к завершающему процедуру оператору END
|
Возвращает управление вызвавшему ее приложению и устанавливает SQLCODE в 100 (конец потока) |
Выполнимая процедура
|
Переходит к завершающему процедуру оператору END. He рекомендуется |
Переходит к завершающему процедуру оператору END
|
Возвращает значения и передает управление вызвавшему ее приложению |
ОПЕРАТОР ОБРАБОТКИ ОШИБОК WHEN
Оператор WHEN ... DO обеспечивает обработку возникших ошибок. Оператор применяется в хранимых процедурах и триггерах.
Синтаксис:
WHEN {LIST_<error> / ANY} DO <compound_statement>
< error> :: {EXCEPTION errcode}
exception_name / SQLCODE number / GDSCODE
Оператор WHEN должен быть последним в блоке BEGIN...END. С его помощью процедуры и триггеры могут обрабатывать ошибки трех типов:
Исключения, инициированные оператором EXCEPTION в данной процедуре или процедурах, прямо или косвенно вызванных данной, а также исключения, инициированные в триггерах, вызванных в результате действий этих процедур.
SQL-ошибки, идентифицирующиеся SQLCODE.
Ошибки, идентифицирующиеся кодами ошибок InterBase. Конструкция ANY позволяет выполнять операторы обработки при возникновении любых ошибок перечисленных типов.
Сводка синтаксиса оператора WHEN приведена в таблице.
Параметр |
Описание |
EXCEPTION exception_name |
Имя исключения (описанного в базе) |
SQLCODE number |
Код ошибки – SQLCODE |
GDSCODE errcode |
Код ошибки InterBase |
ANY |
Обеспечивает вызов обработчика для любых перехватываемых ошибок |
<compound_statement> |
Простой оператор или блок, осуществляющий обработку ошибок |