Ограничения на уровне домена.

Средства СУБД InterBase, обеспечивающие приемлимые значения целостность данных.

DO

FOR

<оператор SELECT>

< оператор>;

 

Оператор SELECT представляется в расширенном синтаксисе оператора SELECT для алгоритмического языка хранимых процедур и триггеров, то есть в нем может присутствовать предложение INTO.

Алгоритм работы оператора FOR SELECT... DO заключается в следующем. Выполняется оператор SELECT, и для каждой строки результирующего набора данных, возвращаемого данным SELECT, выполняется оператор, следующий за словом DO. Этим оператором часто бывает SUSPEND (см. ниже), который приводит к возврату выходных параметров в вызывающее приложение.

 

Оператор SUSPEND. Оператор SUSPEND передает в вызывающее приложение значения результирующих параметров (перечисленных после слова RETURNS в описании функции), имеющие место на момент выполнения SUSPEND. После этого выполнение хранимой процедуры приостанавливается. Когда от оператора SE­LECT вызывающего приложения приходит запрос на следующее значение выходных параметров, выполнение хранимой процедуры возобновляется.

 

Оператор WHILE ... DO. Оператор имеет формат

WHILE (<условие>) DO

< оператор>

 

Алгоритм выполнения оператора: в цикле проверяется выполнение условия; если оно истинно, выполняется оператор. Цикл продолжается до тех пор, пока условие не перестанет выполняться.

 

Оператор EXIT. Оператор EXIT инициирует прекращение выполнения процедуры и выход в вызывающее приложение.

 

Оператор EXECUTE PROCEDURE. Оператор имеет следующий формат:

 

EXECUTE PROCEDURE имя [параметр [, параметр ...]];

[RETURNING_VALUES параметр [, параметр ... ]];

 

Выполняет другую хранимую процедуру из тела данной хранимой процедуры. При этом после слова PROCEDURE перечисляются входные параметры, если они есть, а после RETURNING_VALUES перечисляются выходные параметры.

 

Оператор POST_EVENT. Оператор имеет следующий формат

 

POST_EVENT "Имя события";

 

Он применяется для посылки сервером клиентским приложениям сообщения о наступлении какой-либо ситуации, связанной с именем события. Приложение должно зарегистрироваться на сервере для получения уведомления о наступлении событий и указать список интересующих приложение событий.

 

 

Пришло время рассмотреть предложение CHECK оператора CREATE DOMAIN.

 

CREATE DOMAIN домен [AS] <тип_данных>

[DEFAULT {литерал | NULL | USER}]

[NOT NULL] [CHECK (<условие_поиска>)]

[COLLATE collation]

 

Предложение CHECK определяет требования к значениям каждого столбца, ассоциированного с доменом. Столбцу не могут быть присвоены значения, не удовлетворяющие ограничениям, наложенным в предложении CHECK. Формат ограничения, накладываемого на значения полей, ассоциированных с доменом:

 

<огранич_домена> = { VALUE <оператор> <значение> | VALUE [NOT] BETWEEN <значение1> AND <значение2>

VALUE [NOT] LIKE <значение> [ESCAPE <значение>]

VALUE [NOT] IN (<значение1> [, <значение2> ...])

VALUE IS [NOT] NULL

VALUE [NOT] CONTAINING <значение>

VALUE [NOT] STARTING [WITH] <значение>

(<огранич_домена>)

NOT <огранич__домена>

<огранич_домена> OR <огранич_домена>

<огранич_домена> AND <огранич_домена>

 

где <оператор>= {= | < | > | <= | >= | !< | !> | <> | !=}

Ключевое слово VALUE далее означает все правильные значения, которые могут быть присвоены столбцу, ассоциированному с доменом.

· VALUE <оператор> <значение>определяет, что значение домена
находится с параметром значение во взаимоотношениях, определяемых параметром оператор. Например, значение, которое может быть записано в столбец, ассоциированный с доменом ID_TYPE, должно быть больше или равно 100:

 

CREATE DOMAIN ID_TYPE AS

INTEGER CHECK(VALUE >= 100);

 

· BETWEEN <значение1>AND<значение2>определяет, что значение домена должно находиться в промежутке между значение] и значение2, включая их;

· LIKE <значение1> [ESCAPE <значение2>|определяет, что значение домена должно "походить" на параметр значение 1. При этом употребляется символ '%' для указания любого значения любой длины и символ '_' (подчеркивания) для указания любого единичного символа. Например,

 

LIKE "%USD" - вводимое значение должно оканчиваться символами 'USD', независимо от того, какие символы и сколько расположены перед ними;

 

LIKE " __94" – вводимое значение может содержать 4 символа, из которых первые два – любые и последние два - '94'.

 

ESCAPE <значение2>используется, если в операторе LIKE символы '%' или '_' должны использоваться в шаблоне подобия. В этом случае выбирается некоторый символ, например "!", после которого символы '%','_' входят в поисковую строку как непосредственно символы. Символ '!' указывается после слова ESCAPE, например:

 

CREATE DOMAIN SUMMA AS

CHAR(10) CHECK(LIKE "%!%" ESCAPE "!");

 

Значения столбца SUMMA должны заканчиваться символом "%".

 

· IN (<значение1> [, <значение2>...])определяет, что значение домена должно совпадать с одним из приведенных в списке параметров значение Х,, например:

 

CREATE DOMAIN SEX AS

CHAR(1) CHECK(VALUE IN ("М","Ж"));

 

· CONTAINING<значение>определяет, что значение домена должно содержать вхождение параметра значение, неважно в каком месте. Например, в наименовании отдела вхождение "041" может встретиться где угодно ("Отдел-041002", "003404192", и т.д.):

 

CREATE DOMAIN OTDEL_TYPE AS

VARCHAR(10) CHECK(VALUE CONTAINING "041")

COLLATE PXW_CYRL;

 

· STARTING [WITH]<значение>требует, чтобы значение домена начиналось параметром значение. Например, название отдела должно начинаться с "041":

 

CREATE DOMAIN OTDEL_TYPE AS VARCHAR(10)

CHECK(VALUE STARTING WITH "041")

COLLATE PXW_CYRL;

 

· Может быть задана комбинация условий, которым должно соответствовать значение домена. В этом случае отдельные условия соединяются операторами AND или OR. Например:

 

CREATE DOMAIN OTDEL_TYPE AS VARCHAR(10)

CHECK(VALUE STARTING WITH "041" AND

VALUE CONTAINING "-12")

COLLATE PXW_CYRL;

 

Для большинства условий можно указать слово NOT, которое изменит условие с точностью до наоборот. Например:

 

CHECK(VALUE NOT BETWEEN 1 AND 100);