Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Fondovi-lekcii.doc
Скачиваний:
20
Добавлен:
10.11.2018
Размер:
4.09 Mб
Скачать

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.

Контрольні питання:

  1. Вкажіть обмеження в базі даних.

  2. Які типи обмежень існують?

  3. Яка команда створює обмеження?

  4. Яке обмеження створює первинний ключ?

  5. Як додати обмеження в уже існуючу таблицю?

  6. Що виконує обмеження CHECK? Яка його структура?

  7. Коли доцільно використовувати обмеження DEFAULT?

Тема 9. Використання збережуваних процедур в базах даних. Використання генераторів ключів у базах даних в InterBase. Використання тригерів у базах даних.

  1. Використання збережуваних процедур в базах даних.

  2. Використання генераторів ключів в базах даних в InterBase.

  3. Використання тригерів в базах даних.

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>;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]