Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных Шехтман.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
3 Мб
Скачать
☆

Разработка данных

Система должна ответить, какие данные следует исследовать.

Товары(Корзина, Товар)

SELECT I.Товар, J.Товар, COUNT(I.Корзина)

FROM Товары I, Товары J

WHERE I.Корзина = J.Корзина AND I.Товар <> J.Товар

GROUP BY I.Товар, J.Товар

HAVING COUNT(I.Корзина) >= :s

14. Загружаемые процедуры.

Расширение SQL (SLQ/PSM – persistant stored modules, постоянные загруженные модули) обеспечивает хранение процедур как элементов схемы базы данных. Язык программирования таких процедур представляет собой смесь обычных элементов языка программирования (if, while, repeat, …) и собственно SQL. Это позволяет выполнять задачи, неосуществимые при использовании “чистого” SQL.

Основная форма задания загружаемой процедуры:

CREATE PROCEDURE <имя> ( <список параметров> )

<объявление локальных переменных>

<тело процедуры>;

или

CREATE FUNCTION <имя> ( < список параметров > ) RETURNS <тип>

<объявление локальных переменных>

< тело процедуры >;

В отличие от обычных языков программирования (C++, Delphi, и т. д.), в которых параметры задаются с помощью пар (имя-тип), в загружаемых программах используется форма (вид-имя-тип), где вид может принимать значения:

IN - значение параметра используется в вычислениях в теле процедуры, но не меняется

OUT - значение не используется в вычислениях в теле процедуры, но изменяется для передачи в вызвавший модуль

INOUT - используется и по виду IN и по виду OUT

Созданим процедуру, которая будет вставлять запись в таблицу SUPPLIES (см. гл.8). В этой процедуре определены 4 входных параметра: G – код товара, D – дата поставки, W – вес, P – цена. Процедура создается с целью упростить запись о новом товаре от активного поставщика Глобус (предположим, что код этого поставщика равен 1001):

CREATE PROCEDURE SUPPLIEDBYGLOBUS

(IN G INTEGER, IN D DATETIME,

IN W DOUBLE PRICISION,

IN P DOUBLE PRICISION)

INSERT INTO SUPPLIES(CODEC, CODEG, DAT, WEIGHT, PRICE)

VALUES (1001, G, D, W, P);

Чтобы вызвать эту процедуру, необходимо воспользоваться оператором CALL:

CALL SUPPLIEDBYGLOBUS(105, ’11.01.2003’, 55, 27)

Другие операторы загружаемых процедур:

RETURN <выражение> - задает значение, возвращаемое функцией (в отличие от C++ или Basic, этот оператор не завершает выполнение функции);

DECLARE <имя> <тип> - объявляет локальные переменные;

BEGIN … END – задают группу операторов;

SET <переменная> = <выражение>; - оператор присваивания значения;

Метку любого оператора можно задать путем указания его имени и следующего за ним двоеточия.

Формы оператора условного выбора:

IF <условие> THEN <операторы> END IF;

IF … THEN … ELSE … END IF;

IF … THEN … ELSEIF … ELSE … ELSE … END IF;

Пример: составим процедуру, которая охарактеризует товар с точки зрения цены. Если цена товара в поставке выше среденей цены по всем аналогичным товарам, процедура должна вернуть строку ‘Дорого’, иначе ‘Дешево’.

CREATE FUNCTION HOWMACH

(IN G INTEGER,