- •Модуль 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
- •Література
1.2. Цикли й оператори розгалуження.
Основна проблема "вбудовування" речення SELECT в процедуру полягає в тому, що SELECT, як правило, породжує таблицю з множиною рядків і стовпців, а включаюча мова не має засобів, що дозволяють оперувати одночасно більш ніж одним записом. З цієї причини необхідно забезпечити міст між рівнем множин мови SQL і рівнем записів процедури.
Для цього використовується одиничне SELECT, формат якого має вид
SELECT { * | элемент_select [, элемент_select] ...}
INTO змінна [, змінна] ...
FROM базова_таблиця [, базова_таблиця] ...
[WHERE умова ];
Очевидно, що цей опис відрізняється від стандартного підзапиту наявністю фрази INTO і включенням змінних.
Наведемо приклад. Одержати загальну вагу продуктів на складі і занести її в змінну Загальна_вага:
SELECT SUM(Кількість)
INTO Загальна_вага
FROM Склад;
Якщо запит повертає більш одного рядка, то його необхідно оформити у виді конструкції FOR SELECT...DO, що організує цикл для обробки кожного рядка, що повертається.
FOR
SELECT ID, NAME, PRICE_1
FROM Table_Example
INTO :ID, :NAME, :new_price
DO
BEGIN
/*тут обробляємо кожен запис*/
END
Зверніть увагу, що змінні ID, NAME, new_price випереджаються двокрапкою – для того, щоб відрізнити їх від полів, що використовуються у запиті.
Крім команди FOR SELECT... DO, що організує цикл по записах будь-якої вибірки, існує інший вид циклу – WHILE...DO, що дозволяє організувати цикл на основі перевірки будь-яких умов. Ось приклад ЗП, що використовує цикл WHILE. ..DO. Ця процедура повертає квадрати цілих чисел від 0 до 99:
CREATE PROCEDURE QUAD
RETURNS (QUADRAT INTEGER)
AS
DECLARE VARIABLE I INTEGER;
BEGIN
I=1
WHILE (i<100) DO
BEGIN
QUADRAT = I*I;
SUSPEND;
END
END
Крім перебору результатів SQL-вибірки і класичного циклу, у мові збережуваних процедур використовується оператор IF...THEN..ELSE, що дозволяє організувати розгалуження в залежності від виконання яких-небудь умов.
Давайте розглянемо більш складний приклад збережуваної процедури, що робить наступне:
1. Обчислює середню ціну в таблиці Table_example.
2. Далі для кожного запису в таблиці робить наступну перевірку: якщо існуюча ціна (PRICE) більше середньої ціни, то встановлює ціну, рівну величині середньої ціни, плюс фіксований відсоток, що задається.
3. Якщо існуюча ціна рівна чи менша середньої ціни, то встановлює ціну, рівну колишній ціні, плюс половина різниці між колишньою і середньою ціною.
4. Повертає всі змінені рядки в таблиці.
Збережувана процедура, що реалізує це завдання має вид:
CREATE PROCEDURE IncreasePrices (Percent2Increase DOUBLE PRECISION) RETURNS (ID INTEGER, NAME VARCHAR(8O), new_price DOUBLE PRECISION) AS DECLARE VARIABLE avg_price DOUBLE PRECISION;
BEGIN
SELECT AVG(Price_l)
FROM Table_Example
INTO :avg_price ;
FOR
SELECT ID,NAME, PRICE_1 FROM Table_Example
INTO :ID, :NAME,:new_price
DO
BEGIN
/*тут обробляємо кожен запис*/
IF (new_price > avg__price) THEN
/*якщо існуюча ціна більше середньої ціни*/
BEGIN
/*установимо нову ціну, рівну величині середньої ціни, плюс
фіксований відсоток */
new_price = (avg_price + avg_price*(Percent2Increase/100);
UPDATE Table_example
SET PRICE_1 = :new_price
WHERE ID = :ID;
END ELSE BEGIN
/* Якщо існуюча ціна чи менше дорівнює середній ціні, то встановлює ціну, рівну колишній ціні, плюс половина різниці між колишньою і середньою ціною */
new_price = (new_price + ((avg_price - new_price)/2));
UPDATE Table_example
SET PRICE_1 = :new_price
WHERE ID = :ID;
END
SUSPEND;
END
END