- •Модуль 1 Тема 1. Вступ до sql. Синтаксис sql. Типи даних.
- •1. Вступ до sql.
- •Функції sql:
- •Роль sql
- •Переваги sql:
- •Синтаксис sql.
- •Типи даних.
- •1.3.1. Команди
- •1.3.2. Імена
- •1.3.3. Типи даних
- •1.3.4. Константи
- •1.3.4.1. Числові константи
- •1 .3.4.2. Літерні рядки
- •1.3.4.3. Константи дати і часу
- •1.3.4.4. Іменовані константи
- •1.3.5. Вирази
- •1.3.6. Вбудовані функції
- •Тема 2. Створення баз даних
- •Мова визначення даних
- •2. Створення бази даних
- •Тема 3. Створення таблиць
- •1. Команда створення таблиці.
- •2. Заборона значення null за допомогою обмеження not null
- •Тема 4. Вставка стрічок з допомогою оператора insert. Вилучення стрічок з допомогою оператора delete, редагування стрічки з допомогою команди update.
- •Вставка рядків за допомогою команди insert.
- •Додавання рядка за допомогою положення стовпця
- •Додавання рядка за допомогою назв стовпців
- •Додавання рядків з однієї таблиці в іншу
- •Зміна рядків за допомогою команди update.
- •Зміна рядків
- •Видалення рядків за допомогою команди delete
- •Видалення рядків
- •Тема 5. Оператор select
- •Оператор select.
- •Обчислювальні стовпчики. Альтернативне ім’я стовпчику.
- •Порівняння значення стовпчика із константою
- •Правила виконання однотабличних запитів на вибірку
- •Тема 6. Комбінування умов з допомогою операторів and, or, not. Порівняння по шаблону. Порівняння з діапазоном. Сортування стрічок з допомогою речення order by.
- •Порівняння значень виразів має наступну синтаксичну діаграму:
- •Тема 7. Створення псевдонімів. З’єднання таблиці із собою. Вибір даних з кількох таблиць
- •1. Створення псевдонімів.
- •2. З’єднання таблиці із собою.
- •3. Просте з’єднання таблиць (з’єднання за рівністю)
- •Запити з використанням відношення „головна – підлегла” таблиці (предок – нащадок)
- •3. Запити на вибірку до трьох і більше таблиць
- •4. Запити на об’єднання
- •Тема 8. Введення обмежень в базах даних
- •1. Види обмежень в базі даних.
- •Основні принципи роботи з обмеженнями
- •Присвоєння назви обмеженню
- •2. Первинний і унікальний ключі.
- •3. Зовнішні ключі.
- •4. Обмеження check
- •5. Вилучення обмежень.
- •Тема 9. Використання збережуваних процедур в базах даних. Використання генераторів ключів у базах даних в InterBase. Використання тригерів у базах даних.
- •1. Визначення збережуваної процедури.
- •1.2. Цикли й оператори розгалуження.
- •2. Створення генераторів.
- •2.1. Індекси.
- •2.2. Обробка виключень і помилок.
- •3. 1.Означення тригера.
- •3.2. Приклад тригера.
- •3.3. Контекстні змінні.
- •Тема 10. Безпека в базах даних
- •1. Користувач InterBase.
- •3. Організація користувачі у групи за допомогою ролей.
- •4. Права. Роздача прав.
- •5. Анулювання прав.
- •Модуль 2 Тема 11. Оператор exists. Сумування і групування даних.
- •1.1. Оператор exists.
- •1.2. Використання exists з співвіднесеними підзапитами.
- •1.3. Комбінація оператора exists і з’єднання.
- •1.4. Використання not exists.
- •1.5. Використання складних підзаписів з оператором exists.
- •2.1. Агрегатні (статистичні) функції
- •2.2. Правила опрацювання значення null агрегатними функціями:
- •2.3.Опрацювання унікальних записів агрегатними функціями
- •2.4. Агрегатні функції і значення null
- •3.1. Групування записів
- •3.2. Секція having – умова відбору груп
- •3.3. Обмеження на умову відбору груп
- •3.4. Значення null і умова відбору груп
- •3.5. Секція having без секції group by
- •Тема 12. З’єднання з базою даних. Використання збережуваних процедур в Delphi
- •1. З’єднання з сервером
- •2. Використання збережуваних процедур в Delphi.
- •Компонент tStoredProc.
- •Тема 13. Використання механізму транзакцій компонента Database. Керування транзакціями
- •Тема 14. Сервер баз даних InterBase і компоненти InterBase Express.
- •1. Сервер баз даних InterBase і компоненти InterBase Express
- •2. Механізм доступу до даних InterBase Express
- •3. Компонент tibDatabase.
- •Тема 15. Виконання запитів за допомогою компонента tibDataSet
- •1. Вибірка даних з таблиці.
- •2. Редагування даних за допомогою візуальних компонентів.
- •3. Програмне редагування даних.
- •Тема 16. Підпорядковані запити в таблицях Механізм master-detail
- •Література
2.2. Обробка виключень і помилок.
Виключення InterBase багато в чому схожі на виключення інших мов високого рівня, однак мають свої особливості. Фактично виключення InterBase – це повідомлення про помилку, що має власне, яке задається програмістом, ім'я і текст повідомлення про помилку. Створюється виключення в такий спосіб:
CREATE EXCEPTION <ім'я_виключення> <текст_виключення>;
Наприклад, ми можемо створити виключення такого виду:
CREATE EXCEPTION test_except 'Test exception';
Виключення легко чи вилучити чи змінити – вилучення задається командою
DROP EXCEPTION <ім'я_ вилучаємого_виключення>, а зміна – ALTER EXCEPTION <ім'я_виключення> <текст_виключення>.
Щоб використовувати виключення в збережуваній процедурі чи тригері, необхідно скористатися командою наступного виду:
EXCEPTION <ім'я_виключення>;
Давайте розглянемо застосування виключень на простому прикладі збережуваної процедури, що виконує ділення одного числа на інше і повертає результат. Нам необхідно відстежити випадок поділу на нуль і викликати виключення, якщо дільник дорівнює нулю.
Для нашого приклада створимо наступне виключення:
CREATE EXCEPTION zero_divide 'Cannot divide by zero!';
Створимо збережену процедуру, що використовує це виключення:
CREATE PROCEDURE SP_DIVIDE(DILENE DOUBLE PRECISION,
DILNYK DOUBLE PRECISION)
RETURNS(RESULT DOUBLE PRECISION)
AS
BEGIN
if (Dilnyk<0.0000001) then
BEGIN
EXCEPTION zero_divide;
Result=0;
END
ELSE
BEGIN
Result=Dilene/Dilnyk;
END SUSPEND;
END
Як бачите, текст ЗП тривіальний – на вході одержуємо Dilene і Dilnyk, потім порівнюємо Dilnyk з 0.0000001, тобто фактично з нулем, у межах обраної погрішності в одну десятимільйонну (тому що дійсні числа неможливо безпосередньо порівнювати через погрішності в дробовій частині). Якщо Dilnyk близький до нуля в межах обраної похибки, то ми збуджуємо виключення zero_divide. Що ж відбувається у випадку виникнення виключення? Якщо ми спробуємо викликати виключення, виконуючи процедуру SP_devide з нульовим дільником у ISQL, то одержимо наступне:
SQL> select * from sp_divide(300,0);
RESULT
Statement failed, SQLCODE = -836
exception 1
-Cannot divide by zero!
Іншими словами, повідомлення про помилку – це результат обробки нашого виключення сервером InterBase. Коли InterBase виявляє появу в ЗП чи тригері виключення, він перериває роботу цієї збережуваної процедури і відкочує всі зміни, зроблені в поточному блоці BEGIN...END.
3. 1.Означення тригера.
Тригер у InterBase – це особливий вид збереженої процедури, що виконується автоматично при вставці, чи вилученні або модифікації запису чи таблиці зображення (view). Тригери можуть "спрацьовувати" безпосередньо до чи відразу ж послу зазначеної події.
Як ви знаєте, SQL дає можливість вставляти, вилучати і модифікувати дані в таблицях бази даних за допомогою відповідних команд – INSERT, DELETE і UPDATE. Погодитеся, що було б непогано мати можливість перехопити передану команду і що-небудь зробити з даними, які додаються, вилучаються чи змінюються. Наприклад, записати ці дані в спеціальну табличку, а заодно записати, хто і коли зробив операцію над даною таблицею. Чи відразу ж перевірити дані, що вставляються, на яку-небудь хитру умову, яку неможливо реалізувати за допомогою опції CHECK, і в залежності від результатів перевірки прийняти проведені зміни чи відкинути їх; змінити ці дані на підставі деякого запиту чи змінити дані в інших зв'язаних таблицях.
Для того, щоб виконувати які-небудь дії, зв'язані зі зміною даних у базі даних, і існують тригери.
Фактично тригер являє собою набір команд процедурної мови InterBase, що реалізується при виконанні операцій INSERT/DELETE/UPDATE. На відміну від збережуваних процедур, тригер ніколи нічого не повертає (та й кому повертати, адже тригер явно не викликається). По тій же причині він не має також вхідних параметрів, але замість них має контекстні змінні NEW і OLD. Ці змінні дозволяють одержати доступ до полів таблиці, до якої приєднаний тригер.
Тригеру призначена роль віртуального цензора, що переглядає "листи" і який вільний зробити усе, що завгодно, – пропустити їх незмінними, підправити їх, просигналізувати про помилки чи навіть "докласти про це" кому слід.
Тригер завжди прив'язаний до якоїсь певної таблиці чи зображення і може "перехоплювати" дані тільки цієї таблиці. Давайте розглянемо класифікацію тригерів і призначення кожного виду. Як уже було сказано, існує 3 основних SQL-операції, застосовні до даних, – INSERT/DELETE/UPDATE. Відповідно перший поділ тригерів – за операціями, що обслуговуються. Кожен конкретний тригер прив'язаний до якої-небудь операції, тобто тригер спрацьовує, коли в "його" таблиці відбувається дана операція.
Спрацьовування тригера може відбуватися як "до" так і "після" операції. Таким чином, ми одержуємо 6 можливих видів тригерів на таблицю – до і після кожної з трьох можливих SQL-операції.