- •Модуль 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. Використання збережуваних процедур в Delphi.
В Delphi використання збережуваних процедур забезпечується компонентом TStoredProc. За його допомогою програма може використовувати як виконувані процедури, так і процедури відбору. Так як компонент TStoredProc є нащадком TDBDataSet, то результатом його роботи може бути виконання модифікацій на сервері без повернення результату, одиничний результат або набір даних.
Доступ компонента до бази даних здійснюється через властивість DatabaseName. Збережувана процедура задається її іменем у властивості StoredProcName. При створенні клієнтської програми в архітектурі клієнт/сервер для з’єднання з сервером бажано використовувати компонент TDatabase.
Якщо збережувана процедура не має вхідних параметрів, то для її виконання використовується метод ЕхесPгос. Наприклад, компонент StoredРroc1 можна пов’язати з деякою збережуваною процедурою:
StoredProcl.DatabaseName := 'IBLOCAL';
StoredProc1.StoredProcName := 'GetSomeVaiue';
StoredProc1.ExecProc;
Якщо збережувана процедура має вхідні параметри, то для їх визначення використовується властивість params типу TРarams. Для збережуваної процедури вхідні параметри задаються так:
StoredProcI.Params[0].AsDateTime := Now;
StoredProcI.Params[1].As Integer := SpinEditI.Value;
StoredProcI.Params[2].AsString := Editl.Text;
StoredProcI.ExecProc;
Після завдання вхідних параметрів за допомогою властивості params необхідно підготувати процедуру до виконання. Для цього використовується метод prepare. Після виконання процедури необхідно звільнити заняті ресурси. Цю роботу виконує метод unprepare:
StoredProcI.Params[0].AsDateTime := Now;
StoredProcI.Params[1].Aslnteger := SpinEditI.Value;
StoredProcI.Params[2].AsString := Editl.Text;
StoredProcI.Prepare;
StoredProcI.ExecProc;
StoredProcI.UnPrepare;
Ці два методи має смисл використовувати лише в тому випадку, якщо після підготовки процедури вона буде викликана досить велике число разів підряд. Це пов’язано з тим, що збережувана процедура готується сервером до виконання в довільному випадку. При явному виклику метода prepare підготовка виконується лише один раз. Тому наступний багатократний виклик процедури буде виконаний швидко. Якщо в цій ситуації не вказати метод prepare, то при кожному виклику сервер буде виконувати підготовку процедури знову і знову.
Для работи з параметрами також можна використати метод paramByName, який повертає потрібний параметр зао його іменем:
StoredProcI.ParamByName('MaxDate').AsDateTime := Now;
StoredProcI.Prepare;
StoredProcI.ExecProc;
Якщо збережувана процедура повертає одиничний результат, то його можна одержати в вихідному параметрі (або декількох вихідних параметрах). Для цього можна знову скористатися методом ParamByName або властивістю Params:
with StoredProcl do begin Params[0].AsString := Edit1.Text;
Prepare ;
ExecProc;
UnPrepare;
Labell.Caption := Params[3].AsString;
end;
Зверніть увагу, що порядок слідування параметрів збережуваної процедури в програмі повинен відповідати порядку в декларації цієї процедури на сервері.
Якщо сервер підтримує виконання збережуваних процедур, що повертають набори даних, то для їх використання досить відкрити набір даних компонента TStoredРroc за допомогою метода Оpen. Якщо ця можливість не підтримується, то для одержання набору даних збережуваної процедури можна скористатися запитом SQL, який здійснює виклик процедури. Після активізації такого запиту в його наборі даних виявиться результат виконання збережуваної процедури.
Для збереження і виконання збережуваних процедур під час виконання клієнтських програм можна використовувати компонент TQuery. Продемонструємо це на прикладі збережуваної процедури для сервера InterBase, який повертає в результаті набір даних.
Для створенні збережуваної процедури використовується запит з оператором CREATE PROCEDURE.
CREATE PROCEDURE SumOrders (OrdDat DATE)
RETURNS (DocNo VARCHAR(IO), OrdSum INTEGER) AS BEGIN FOR
SELECT DocNo, SUM(ItemCount*Price)
FROM ArchOrders
WHERE OrdDat > :OrdDat
GROUP BY DOCNO
INTO :DocNo, :OrdSum DO
SUSPEND;
END
Для виконання збережуваної процедури компонент TQuery повинен містити такий запит:
SELECT * FROM SumOrders ('01.09.99')
В результаті в наборі даних запиту будуть міститися суми всіх замовлень після 1 вересня 1999 г.