- •Модуль 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
- •Література
4. Обмеження check
Одним з найбільш корисних обмежень в базі даних є обмеження перевірки. Ідея його проста – перевіряти вставлюване в таблицю значення на деяку умову і, в залежності від виконаної умови, вставляти чи не вставляти дані.
Синтаксис цього обмеження:
< tconstraint > = [CONSTRAINT constraint] CHECK (<search_condition>) Тут constraint – ім’я обмеження; <search_condition> – умови пошуку, в якому в ролі параметра може приймати участь вставлене/змінене значення. Якщо умови пошуку виконуються, то вставка/зміна цього значення дозволяється, якщо ні – виникає помилка. Самий простий приклад перевірки:
CREATE TABLE Checktst (ID integer CHECK(ID>0));
Ця перевірка встановлює, чи більше нуля вставлюване/змінюване значення поля ID, і в залежності від результату дозволяє вставити/змінити нове значення чи викликати виключення. Поле може мати лише одне обмеження CHECK.
5. Вилучення обмежень.
Часто доводиться вилучати різні обмеження по різним причинам. Щоб вилучити обмеження, слід використати речення ALTER TABLE такого виду:
ALTER TABLE Сablename
DROP CONSTRAINT constraint_name
де constraint_name – ім’я обмеження, яке слід вилучити. Слід відзначити, що вилучати обмеження може лише власник таблиці або системний адміністратор SYSDBA.
Контрольні питання:
-
Вкажіть обмеження в базі даних.
-
Які типи обмежень існують?
-
Яка команда створює обмеження?
-
Яке обмеження створює первинний ключ?
-
Як додати обмеження в уже існуючу таблицю?
-
Що виконує обмеження CHECK? Яка його структура?
-
Коли доцільно використовувати обмеження DEFAULT?
Тема 9. Використання збережуваних процедур в базах даних. Використання генераторів ключів у базах даних в InterBase. Використання тригерів у базах даних.
-
Використання збережуваних процедур в базах даних.
-
Використання генераторів ключів в базах даних в InterBase.
-
Використання тригерів в базах даних.
1. Визначення збережуваної процедури.
Збережувані процедури (англ. stored procedures) дозволяють реалізувати значну частину логіки програми на рівні бази даних і в такий спосіб підвищити продуктивність усієї програми, централізувати обробку даних і зменшити кількість коду, необхідного для виконання поставлених задач. Практично будь-яка досить складна програма баз даних не обходиться без використання збережуваних процедур.
Збережувана процедура (ЗП) – це частина метаданих бази даних, що представляє собою відкомпільовану у внутрішнє представлення InterBase підпрограму, написану спеціальною мовою, компілятор якої убудований у ядро сервера InterBase.
Основою могутніх можливостей, закладених у ЗП, є процедурна мова програмування, що має у своєму складі як модифіковані речення звичайного SQL, такі, як INSERT, UPDATE і SELECT, так і засобу організації розгалужень і циклів (IF, WHILE), а також засоби обробки помилок і виняткових ситуацій. Мова збережуваних процедур дозволяє реалізувати складні алгоритми роботи з даними, а завдяки орієнтованості на роботу з реляційними даними ЗП виходять значно компактнішими аналогічних процедур на традиційних мовах.
Синтаксис збережуваних процедур описується у такий спосіб:
CREATE PROCEDURE name I [ ( param datatype [, param datatype...])]
[RETURNS ( param datatype [, param datatype ...])]
AS
<procedure_body>;
< procedure_body> = [<variable_declaration_list>]
< block>
< variable_declaration_list> =
DECLARE VARIABLE var datatype; [DECLARE VARIABLE var datatype; ...]
<block> =
BEGIN
< compound_statement>
[< compound_statement> ...] ;
END
Розглянемо, як приклад, дуже просту збережувану процедури, що приймає на вході два числа, складає їх і повертає отриманий результат:
CREATE PROCEDURE SP_Add(first_arg DOUBLE PRECISION, secouond_arg DOUBLE PRECISION)
RETURNS (Result DOUBLE PRECISION)
BEGIN
Result=first_arg+second_arg;
SUSPEND;
END
Після команди CREATE PROCEDURE вказується ім'я знову створюваної процедури (яке повинно бути унікальним у межах бази даних) – у даному випадку SP_Add, потім у дужках через кому перелічуються вхідні параметри ЗП – first_arg і second_arg – із вказанням їхніх типів.
Список вхідних параметрів є необов'язковою частиною оператора CREATE PROCEDURE – бувають випадки, коли всі дані для своєї роботи процедура одержує за допомогою запитів до таблиць усередині тіла процедури.
(У збережуваних процедурах використовуються будь-які скалярні типи даних InterBase. He передбачене застосування масивів і типів, обумовлених користувачем, - доменів).
Далі йде ключове слово RETURNS, після якого в дужках перелічуються параметри, що повертаються, із вказівкою їхніх типів – у даному випадку лише один – Result. Якщо процедура не повинна повертати параметри, то слово RETURNS і список параметрів, що повертаються, відсутні.
Після RETURNS() зазначене ключове слово AS. До ключового слова AS йде заголовок, а після нього – тіло процедури.
Тіло збережуваної процедури являє собою перелік описів її внутрішніх (локальних) змінних , і блок операторів, охоплений операторними дужками BEGIN END. У даному випадку тіло ЗП дуже просте – ми просто складаємо два вхідних аргументи і присвоюємо результат вихідному, а потім викликаємо команду SUSPEND. Трохи пізніше ми роз'яснимо зміст дії цієї команди, а поки лише відзначимо, що вона потрібна для передачі параметрів, що повертаються, туди, відкіля була викликана збережувана процедура.
Зверніть увагу, що оператор усередині процедури закінчується крапкою з комою (;). Як відомо, крапка з комою є стандартним роздільником команд у SQL – вона є сигналом інтерпретатору SQL, що текст команди введений цілком і треба починати його обробляти. Чи не вийде так, що, знайшовши крапку з коми в середині ЗП, інтерпретатор SQL вирішить, що команда введена цілком і спробує виконати частина збережуваної процедури? Це припущення не позбавлене змісту.
Команда ISQL, що змінює роздільник пропозицій SQL, виглядає так:
SET TERM <new_term><old_term>
Для типового випадку створення збережуваної процедури це виглядає так:
SET TERM ^;
CREATE PROCEDURE some_procedure
END SET TERM ;^
Тепер, коли процедура створена, її треба якось викликати, передати їй параметри й одержати результати, що повертаються. Це зробити дуже просто – досить написати SQL-запит наступного виду:
SELECT *
FROM Sp_add(181.35.23.09)
Цей запит поверне нам один рядок, що містить всього одне поле Result, у якому буде знаходитися сума чисел 181.35 і 23.09 тобто 204.44.
Таким чином, нашу процедуру можна використовувати в звичайних SQL-запитах, що виконуються як у клієнтських програмах, так і в інших ЗП чи тригерах. Таке використання нашої процедури стало можливим через застосування команди SUSPEND наприкінці збережуваної процедури.
Для того щоб оголосити локальну змінну у збережуваній процедурі, необхідно помістити її опис після ключового слова AS і до першого слова BEGIN. Опис локальної змінної виглядає так:
DECLARE VARIABLE <variable_name> <variable_type>;