- •3. Детализация реляционной модели данных
- •3.1. Определение и элементы реляционной модели
- •3.2 Связывание таблиц
- •3.2.1 Назначение и основные виды связывания таблиц
- •3.2.2 Межтабличная связь вида 1:1
- •3.2.3 Межтабличные связи вида 1:м и вида м:1
- •Межтабличная связь вида м:м
- •3.3 Контроль целостности связей
- •3.4 Теоретические языки запросов
- •3.5 Основы реляционной алгебры
- •3.5.1 Общая характеристика реляционной алгебры
- •3.5.2 Базовые теоретико-множественные операции реляционной алгебры Кодда
- •3.5.3 Специальные реляционные операции реляционной алгебры Кодда
- •3.5.4 Дополнительные операции реляционной алгебры
- •3.5.5Основные правила записи выраженийреляционной алгебры
- •3.6. Основы реляционного исчисления
- •3.6.1 Сущность реляционного исчисления и его соотношение с реляционной алгеброй
- •3.6.2 Реляционное исчисление, основанное на кортежах
- •3.6.3 Реляционное исчисление, основанное на доменах
- •3.7 Структурированный язык запросовSql
- •3.7.1 Общая характеристика и основные операторы языкаSql
- •3.7.2 Оператор создания таблицы
- •3.7.3 Оператор изменения структуры таблиц
- •3.7.4 Оператор удаления таблицы
- •3.7.5 Оператор создания индекса
- •3.7.6 Оператор удаления индекса
- •3.7.7Оператор создания представления
- •3.7.8 Оператор удаления представления
- •3.7.9 Оператор выборки записей
- •3.7.10 Оператор изменения записей
- •3.7.11 Оператор вставки новых записей
- •3.7.12 Оператор удаления записей
- •3.7.13 Некоторые важные функции sql
- •3.7.14 Триггеры, ограничения, правила и хранимые процедуры
- •3.7.14.1 Определения
- •3.7.14.2 Создание триггеров
- •3.7.14.3 Создание хранимых процедур
- •3.7.14.4 Создание правил и ограничений
3.7.14.3 Создание хранимых процедур
Хранимые процедуры в MS SQL Server 2000 пишут на языке SQL. Следующий пример дает иллюстрацию.
CREATE PROCmyproc
AS
SELECT * from Склад
WHEREЦена>2000
RETURN
Текст хранимой процедуры помещается между ключевыми словами AS … RETURN.
В процедуре можно указывать аргументы (параметры) с именами, начинающимися на @:
CREATE PROCmyproc
@xprice int= 1500
AS
SELECT * FROM Склад
WHEREЦена>@xprice
RETURN
В этом примере указан параметр процедуры @xprice, которому по умолчанию присваивается значение 1500. Присваивание значения по умолчанию будет иметь место в том случае, если при обращении к процедуре параметр не будет определен.
Вызов процедуры на выполнение с передачей ей параметра реализуется таким образом:
EXECmyproc 3000
Здесь указывается имя вызываемой процедуры и значение параметра (3000).
В процедуре можно указывать возвращаемые параметры. В объявлении возвращаемых параметров следует использовать ключевое слово OUTPUT:
CREATE PROCmyproc
@nam varChar(40),
@xprice int OUTPUT
AS
SELECT @xprice=Цена FROM Склад
WHEREНазвание=@nam
RETURN
Из текста этой процедуры видно, что у нее имеется два параметра:
@nam, @xprice. Последний из этих параметров объявлен как выходной (значение этого параметра возвращается в точку вызова). В тексте процедуры мы видим, как такой параметр получает значение:
SELECT@xprice=Цена.
Вызов процедуры может быть реализован следующим образом:
EXECmyproc‘бумага’, @prc OUTPUT
3.7.14.4 Создание правил и ограничений
Создание правила выполняется, например, так:
CREATE RULER1
AS @price BETWEEN 1 AND 100000
Поскольку правило связывается со столбцом, то имя переменной @priceне имеет никакого значения. Переменная при выполнении правила получает значение столбца. Если условие правила оценивается как .F., то операцияINSERTилиUPDATEотменяется. Для связывания правила со столбцом можно использовать сохраняемую процедуру
sp_bindruleимя_правила, имя_столбца
Теперь приведем примеры команд, использующих ограничения при создании таблиц в существующей БД.
CREATE TABLE Склад (Код int NOT NULL
CONSTRAINT fircst PRIMARY KEY,
Название varchar(40), Цена int, Количество int)
Данная команда создает таблицу с именем Склад. В команде указываются имена столбцов: Код, Название, Цена, Количество и соответствующие им типы данных. Поскольку мы хотим определить в качестве первичного ключа поле Код, то это выполняется с помощью ограничения
CONSTRAINTfircstPRIMARY KEY
Указывается, что ограничение имеет имя fircstи устанавливает данное поле в качестве первичного ключа (PRIMARY KEY).
Объявить поле первичным ключом можно и проще без использования ограничения:
CREATE TABLE Склад (Код int NOT NULL PRIMARY KEY,
Название varchar(40),
Цена int,
Количество int)
Преимущество использования ограничения состоит в том, что ограничение можно удалить, тем сам поле Код перестанет являться первичным ключом. Удаление нашего ограничения можно выполнить так:
DROP CONSTRAINTfircst
В ограничениях можно указывать условия на значения данных с помощью спецификатора CHECK:
CREATE TABLE Склад (Код int NOT NULL PRIMARY KEY,
Название varchar(40),
Цена int,
Количество int,
CONSTRAINT price CHECK (Цена > 0 AND Цена <1000000))
Проверяемое условие вставлено в ограничение с именем price. Оно состоит из двух простых условий: Цена > 0 и Цена <1000000.
Попутно отметим, что некоторые столбцы можно создавать как вычисляемые выражения (для MSSQLServer). Например, создадим столбец НАЛОГ как выражение ЦЕНА*КОЛИЧЕСТВО*0.13:
CREATE TABLE Склад (Код int NOT NULL PRIMARY KEY,
Название varchar(40),
Цена int NOT NULL,
Количество intNOTNULL,
НАЛОГ numeric(10,3)ASЦЕНА *Количество*0.13,
CONSTRAINTprice CHECK (Цена > 0 AND Цена <1000000))
Вычисляемый столбец определяется как выражение, помещаемое вслед за ключевым словом AS.