Клієнти, які зв'язані з SQL сервером, можуть звертатися до його потужностей для рішення складних задач. Це ефективніше, ніж розв’язувати подібні задачі на більш слабкому комп'ютері клієнта. До того ж, це дозволяє мінімізувати обсяги інформації, що пересилається мережею. Наприклад, якщо користувачу потрібно відшукати тільки один конкретний запис і переглянути в ньому деякі поля, доцільно всю процедуру пошуку виконати на сервері, а користувачу переслати тільки поля знайденого для нього запису. В ідеалі клієнт повинний одержувати тільки той мінімум даних, якими маніпулює користувач.
Багато серверів, у тому числі InterBase, дозволяють написання спеціальних процедур, що зберігаються і виконуються на сервері. На жаль, мова написання збережених процедур різна у різних системах. І мова InterBase має мало спільного з мовою Sybase чи Microsoft SQL сервера.
InterBase підтримує два види збережених процедур: виконувані (Execute), що можуть передавати параметри іякі маніпулюють даними, іпроцедури вибору (SELECT), що є таблицями тільки для читання, але які сприймають параметри для визначення результатів, що повертаються.
Розглянемо спочатку процес створення виконуваних збережених процедур. Найпростіший шлях для цього — написання відповідних script-файлів і їхнє виконання за допомогою WISQL. Варто підкреслити, що використання інтерактивного режиму роботи з WISQL для створення збережених процедур не допускається.
Структура відповідного файлу може мати вид:
CONNECT <база даних > USER <ім'я користувача >
PASSWORD <пароль >;
SЕТ AUTODDL OFF;
SET TERM ^;
CREATE PROCEDURE<ім'я процедури > AS BEGIN
END^
SET TERM;^
COMMIT;
Перша команда Connect зв'язується з базою даних. Друга команда Set відключає опцію AUTODDL. Це запобігає передчасному створенню процедури. Наступна команда Set Term замінює символ закінчення «;» на «^». Навіщо це треба? Оператори InterBase і оператори SQL, що використані при написанні тексту процедури, мають однакові символи закінчення — «;». Тому транслятор не зможе розібратися, де оператори InterBase, а де оператори процедури. Щоб не виникало цієї плутанини, команда Set тимчасово замінює символ закінчення операторів InterBase на «^». У результаті транслятор буде знати, що оператор, який закінчується символом «^» — це оператор InterBase. А символи закінчення операторів процедури залишаються без змін — «;».
Після розглянутих підготовчих операторів йде оператор створення процедури Create Procedure, у якому вказується ім'я процедури. Після ключового слова AS йдуть оператори самої процедури, що починаються з begin і закінчуються end^. Після цього оператора транслятор починає обробляти подальше як оператори InterBase. Наступний оператор Set Term переключає символ закінчення на традиційний — «;», а оператор Commit фіксує результат створення процедури в базі даних.
Файл може містити оператори створення декількох процедур. Кожна з них компілюється окремо. Ті, котрі відкомпілювались без синтаксичних помилок, будуть записані в базу даних.
Після того, як процедура створена, її можна тестувати у WISQL в інтерактивному режимі. Для виклику процедури достатньо виконати оператор
EXECUTE PROCEDURE < ім'я >;
Процедури можуть виконуватися будь-яким шляхом: інтерактивно в WISQL, з додатка, можуть викликатися з інших процедур і навіть із самих себе — тобто передбачена можливість рекурсії.
Видалити з бази даних процедуру, що виявилася помилковою, можна оператором
DROP PROCEDURE < ім'я >;
Розглянута вище структура процедури — найпростіша. Вона відповідає процедурі, у яку не передається ніяких параметрів і яка нічого не повертає, а просто, наприклад, змінює базу даних. Розглянемо тепер приклад більш складної процедури з параметрами. У цю процедуру з ім'ям GetInf передаються прізвище, ім'я і по батькові співробітника. Процедура повертає інформацію про співробітника: рік народження, підрозділ, у якому співробітник працює, і стать. Якщо запис співробітника в базі даних не виявлений, то як рік народження повертається 0, що може бути для додатка, що викликав процедуру, сигналом відсутності викликаного запису.
Без стандартних початкових і кінцевих операторів створення такої процедури здійснюється наступним кодом:
Переглянувши даний текст, ви можете побачити, що передані в процедуру параметри визначаються через прискобочний запис, що йде за ім'ям процедури, причому для кожного параметра вказується його тип. Параметри, що повертаються, вказуються аналогічним чином після ключового слова RETURNS.У наведеній процедурі усі імена параметрів починаються із символу «р», але це, звичайно, не обов'язково. Просто подібне позначення дозволяє легше читати текст процедури і не плутати параметри з іменами полів.
Тіло процедури складається усього з двох операторів. Перший з них задає значення параметра, що повертається, pYear, рівним нулю. Другий оператор SELECTшукає запис, у якому значення полів Fam, Nam і Par збігаються відповідно з заданими значеннями прізвища, імені і по батькові (параметрами рРаm, pNam і рРаг).Якщо такий запис знайшовся, то в параметри pYear, pDep і pSex(зазначені після ключового слова Into) передаються значення полів Year_b, Dep і Sex, зазначених після ключового слова SELECT.У такий спосіб конструкція SELECT ... Into дозволяє заносити результати відбору в параметри. Якщо шуканий запис відсутній у базі даних, оператор SELECTнічого в параметри не заносить. Отже, у параметрі, що повертається,pYear залишиться 0, що привласнений попереднім оператором. Це буде сигналом для програми, що викликала дану процедуру, про відсутність запису. Виклик такої процедури з WISQL може здійснюватися оператором виду:
Наведена процедура ілюструє деякі можливості опису виконуваних збережених процедур. У процедурах можна використовувати цикли, оператори умовної передачі інформації тощо. Більш докладну інформацію можна знайти у вбудованій у WISQL довідці.