Формат
<subquery> ::=
(SELECT [ALL | DISTINCT] <result specification>
<table expression>)
<result specification> ::=
<value expression>
| *
Формат
<query specification> ::=
(SELECT [ALL | DISTINCT] <select list>
<table expression>)
<select list> ::=
<value expression> [{,<value expression>}]
| *
Формат
<schema> ::=
CREATE SCHEMA <schema authorization clause>
[<schema element>...]
<schema authorization clause> ::=
AUTHORIZATION <schema authorization identifier>
<schema authorization identifier> ::=
<authorization identifier>
<schema element> ::=
<table definition>
| <view definition>
| <privilege definition>
Формат
<table definition> ::=
CREATE TABLE <table name>
(<table element> [{,<table element>}...])
<table element> ::=
<column definition>
| <table constraint definition>
Формат
<column definition> ::=
<column name> <data type>
[<default clause>]
[<column constraint>...]
<column constraint> ::=
NOT NULL [<unique specification>]
| <references specification>
| CHECK (<search condition>)
Функция
Специфицирует мультимножество значений, полученных из результата <выражения, вырабатывающего таблицу> (<table expression>).
Функция
Специфицирует таблицу, полученную из результата <выражения, вырабатывающего таблицу> (<table expression>).
Общие правила
Если R не является сгруппированной таблицей и <выражение, вырабатывающее значение> (<value expression>) включает <спецификацию функции над множеством> (<set function specification>), то R является аргументом или источником аргумента каждой <спецификации функции над множеством> (<set function specification>) в <выражении, вырабатывающем значение> (<value expression>) и результат <подзапроса> (<subquery>) есть значение, специфицированное <выражением, вырабатывающем значение> (<value expression>).
Если R не является сгруппированной таблицей и <выражение, вырабатывающее значение> (<value expression>) не включает <спецификацию функции над множеством> (<set function specification>), то <выражение, вырабатывающее значение> (<value expression>) применяется к каждой строке R, образуя мультимножество из n значений, где n - мощность R. Если не указано ключевое слово DISTINCT, то это мультимножество является результатом <подзапроса> (<subquery>). Если DISTINCT указано, то результатом <подзапроса> (<subquery>) является множество значений, получаемое из этого мультимножества удалением любых избыточных дублирующих значений.
Если R - сгруппированная таблица, то <выражение, вырабатывающее значение> (<value expression>) применяется к каждой группе R, образуя мультимножество из n значений, где n - число групп в R. Когда <выражение, вырабатывающее значение> (<value expression>) применяется к данной группе R, эта группа является аргументом или источником аргумента каждой <спецификации функции над множеством> (<set function specification>) в <выражении, вырабатывающем значение> (<value expression>). Если не указано ключевое слово DISTINCT, то это мультимножество является результатом <подзапроса> (<subquery>). Если DISTINCT указано, то результатом <подзапроса> (<subquery>) является множество значений, получаемое из этого мультимножества удалением любых избыточных дублирующих значений.
Общие правила
Если R не является сгруппированной таблицей и <список выборки> (<select list>) включает <спецификацию функции над множеством> (<set function specification>), то R является аргументом или источником аргумента каждой <спецификации функции над множеством> (<set function specification>) в <списке выборки> (<select list>) и результат <спецификации запроса> (<query specification>) есть таблица, состоящая из одной строки. I-ое значение строки есть значение, специфицированное i-ым <выражением, вырабатывающим значение> (<value expression>).
Если R не является сгруппированной таблицей и <список выборки> (<select list>) не включает <спецификацию функции над множеством> (<set function specification>), то каждое <выражение, вырабатывающее значение> (<value expression>) применяется к каждой строке R, образуя таблицу из m строк, где m - мощность R. I-ый столбец таблицы содержит значения, полученные применением i-ого <выражения, вырабатывающего значение> (<value expression>). Если не указано ключевое слово DISTINCT, то эта таблица является результатом <спецификации запроса> (<query specification>). Если DISTINCT указано, то результатом <спецификации запроса> (<query specification>) является таблица, получаемая из этой таблицы удалением любых избыточных дублирующих значений.
Если R - сгруппированная таблица с нулевым числом групп, то результатом <спецификации запроса> (<query specification>) является пустая таблица.
Если R - сгруппированная таблица с одной или более групп, то каждое <выражение, вырабатывающее значение> (<value expression>) применяется к каждой группе R, образуя таблицу из m строк, где m - число групп в R. I-ый столбец таблицы содержит значения, полученные применением i-ого <выражения, вырабатывающего значения> (<value expression>). Когда <выражение, вырабатывающее значение> (<value expression>) применяется к данной группе R, эта группа является аргументом или источником аргумента каждой <спецификации функции над множеством> (<set function specification>) в <выражении, вырабатывающем значение> (<value expression>). Если не указано ключевое слово DISTINCT, то эта таблица является результатом <спецификации запроса> (<query specification>). Если DISTINCT указано, то результатом <спецификации запроса> (<query specification>) является таблица, получаемая из этой таблицы удалением любых избыточных дублирующих строк.
Строка является дубликатом другой строки в том и только в том случае, когда все пары значений с одной и той же порядковой позицией идентичны.
Общие правила
<Определение таблицы> (<table definition>) определяет базовую таблицу.
Синтаксические правила
Применимые привилегии для каждого <имени таблицы> (<table name>), содержащегося в <выражении, вырабатывающем таблицу> (<table expression>), должны включать SELECT.
Замечание: "Применимые <привилегии> (<privileges>)" для <имени таблицы> (<table name>) определяются в , "<определение привилегий> (<privileges definition>)".
a) Если <спецификация результата> (<result specification>) "*" указана в <подзапросе> (<subquery>) какого-либо <предиката> (<predicate>), отличного от <предиката exists> (<exists predicate>), то степень <выражения, вырабатываающего таблицу> (<table expression>) должна быть равна 1 и <спецификация результата> (<result specification>) эквивалентна <выражению, вырабатывающему значение> (<value expression>), состоящему из <спецификации столбца> (<column specification>), указывающей на единственный столбец <выражения, вырабатывающего таблицу> (<table expression>).
b) Если <спецификация результата> (<result specification>) "*" указана в <подзапросе> (<subquery>) <предиката exists> (<exists predicate>), то <спецификация результата> (<result specification>) эквивалентна произвольному <выражению, вырабатывающему значение> (<value expression>), не включающему <спецификацию функции над множеством> (<table expression>) и допустимому в <подзапросе> (<subquery>).
Тип данных значений <подзапроса> (<subquery>) есть тип данных явного или неявного <выражения, вырабатывающего значение> (<value expression>).
Пусть R обозначает результат <выражения, вырабатывающего таблицу> (<table expression>).
Каждая <спецификация столбца> (<column specification>) в <выражении, вырабатывающем значение> (<value expression>) должна недвусмысленно ссылаться на столбец R.
Синтаксические правила
Применимые привилегии для каждого <имени таблицы> (<table name>), содержащегося в <выражении, вырабатывающем таблицу> (<table expression>), должны включать SELECT.
Замечание: "Применимые <привилегии> (<privileges>)" для <имени таблицы> (<table name>) определяются в , "<определение привилегий> (<privileges definition>)".
Пусть R обозначает результат <выражения, вырабатывающего таблицу> (<table specification>).
Степень таблицы, специфицированной через <спецификацию запроса> (<query specification>) равна мощности <списка выборки> (<select list>).
<Список выборки> (<select list>) "*" эквивалентен последовательности <выражений, вырабатывающих значение> (<value expression>), в которой каждое <выражение, вырабатывающее значение> (<value expression>) является <спецификацией столбца> (<column specification>), указывающей на столбец R, и каждый столбец R указывается ровно один раз. Столбцы указываются в порядке возрастания номеров их исходных позиций внутри R.
Каждая <спецификация столбца> (<column specification>) в каждом <выражении, вырабатывающем значение> (<value expression>) должна однозначно указывать на столбец R. <Ключевое слово> (<key word>) DISTINCT не должно указываться более одного раза в <спецификации запроса> (<query specification>) за исключением любого <подзапроса> (<subquery>) этой <спецификации запроса> (<query specification>).
Если R - это сгруппированное представление, то <список выборки> (<select list>) не должен содержать <спецификацию функции над множеством> (<set function specification>).
Если R - это сгруппированная таблица, то каждая <спецификация столбца> (<column specification>) в каждом <выражении, вырабатывающем значение> (<value expression>) должна указывать на столбец группирования или быть специфицированной внутри <спецификации функции над множеством> (<set function specification>). Если R - это не сгруппированная таблица и какое-либо <выражение, вырабатывающее значение> (<value expression>) включает <спецификацию функции над множеством> (<set function specification>), то каждая <спецификация столбца> (<column specification>) в любом <выражении, вырабатывающем значение> (<value expression>) должна быть указана внутри <спецификации функции над множеством> (<set function specification>).
Синтаксические правила
<Идентификатор полномочий схемы> (<schema authorization identifier>) должен быть отличным от <идентификатора полномочий схемы> (<schema authorization identifier>) любой другой <схемы> (<schema>) в той же самой среде. Понятие среды определяется в реализации.
Синтаксические правила
Если <имя таблицы> (<table name>) содержит <идентификатор полномочий> (<authorization identifier>), то этот <идентификатор полномочий> (<authorization identifier>) должен быть таким же, как <идентификатор полномочий схемы> (<schema authorization identifier>) содержащей схемы.
<Имя таблицы> (<table name>) должно быть отличным от <имени таблицы> (<table name>) любого другого <определения таблицы> (<table definition>) или <определения представления> (<view definition>) содержащей <схемы> (<schema>).
<Определение таблицы> (<table definition>) должно содержать по меньшей мере одно <определение столбца> (<column definition>).
Областью действия <имени таблицы> (<table name>) является <определение таблицы> (<table definition>).
Описание таблицы, определенной через <определение таблицы> (<table definition>) включает имя <имя таблицы> (<table name>) и описание столбцов, специфицированное каждым <определением столбца> (<column definition>. Описание i-го столбца предоставляется i-ым <определением столбца> (<column definition>).
Синтаксические правила
<Имя столбца> (<column name>) должно быть отличным от <имени столбца> (<column name>) любого другого <определения столбца> (<column definition>) содержащегося в <определении таблицы> (<table definition>).
I-ый столбец таблицы описывается i-ым <определением столбца> (<column definition>) в <определении таблицы> (<table definition>). Имя и тип данных столбца определяются <именем столбца> (<column name>) и <типом данных> (<data type>) соответственно.
Пусть C обозначает <имя столбца> (<column name>) в <определении столбца> (<column definition>).
Если указано NOT NULL, то неявно вводится следующее <определение проверочного ограничения> (<check constraint definition>): CHECK (C IS NOT NULL)
Если не указано NOT NULL и не указан <раздел умолчания> (<default clause>), то неявно вводится DEFAULT NULL.
Если указана <спецификация уникальности> (<unique specification>), то неявно вводится следующее <определение ограничения уникальности> (<unique constraint definition>):
<unique specification> (C)
Замечание: <Спецификация уникальности> (<unique specification>) определяется в 6.6, "<определение ограничения уникальности> (<unique constraint definition>)".
Если указана <спецификация ссылок> (<references specification>), то неявно вводится следующее <определение ограничения ссылок> (<referential constraint definition>):
FOREIGN KEY(C) <references specification>
Замечание: <Спецификация ссылок> (<references specification>) определяется в 6.7, "<определение ограничения ссылок> (<referential constraint definition>)".
Если указано CHECK, то каждая <спецификация столбца> (<column specification>) в <условии поиска> (<search condition>) должна ссылаться на столбец C, и неявно вводится следующее <определение проверочного ограничения> (<check constraint definition):
CHECK (<search condition>)
Описание столбца, определенного через <определение столбца> (<column definition>), включает имя <имя столбца> (<column name>) и тип данных, специфицированный <типом данных> (<data type>).
Формат
<default clause> ::=
DEFAULT { <literal> | USER | NULL }
Формат
<table constraint definition> ::=
<unique constraint definition>
| <referential constraint definition>
| <check constraint definition>
Формат
<unique constraint definition> ::=
<unique specification> (<unique column list>)
<unique specification> ::=
UNIQUE | PRIMARY KEY
<unique column list> ::=
<column name> [{,<column name>}...]
Формат
<referential constraint definition> ::=
FOREIGN KEY (<referencing columns>)
<references specification>
<references specification> ::=
REFERENCES <referenced table and columns>
<referencing columns> ::=
<reference column list>
<referenced table and columns> ::=
<table name> [(<reference column list>)]
<reference column list> ::=
<column name> [{,<column name>}...]
Формат
<check constraint definition> ::=
CHECK (<search condition>)
Формат
<view definition> ::=
CREATE VIEW <table name> [(<view column list>)]
AS <query specification>
[WITH CHECK OPTION]
<view column list> ::=
<column name> [{,<column name>}...]
Формат
<privilege definition> ::=
GRANT <privileges> ON <table name>
TO <grantee> [{,<grantee>}...]
[WITH GRANT OPTION]
<privileges> ::=
ALL PRIVILEGES
| <action> [{,<action>}...]
<action> ::=
SELECT | INSERT | DELETE
| UPDATE [(<grant column list>)]
| REFERENCES [(<grant column list>]
<grant column list> ::=
<column name> [{,<column name>}...]
<grantee> ::=
PUBLIC | <authorization identifier>
Функция
Специфицирует умолчание для <определения столбца> (<column definition>).
Функция
Специфицирует ограничение уникальности для таблицы.
Общие правила
Когда строка заносится в таблицу, специфицированную содержащим раздел умолчания <определением таблицы> (<table definition>), столбец, определенный через <определение столбца> (<column definition>), инициализируется следующим образом:
a) Если <определение столбца> (<column definition>) не содержит <раздела умолчания> (<default clause>) или если явно или неявно определяется <раздел умолчания> (<default clause>), специфицирующий NULL, то столбец инициализируется неопределенным значением.
b) Если <определение столбца> (<column definition>) содержит <раздел умолчания> (<default clause>), специфицирующий <литерал> (<literal>), то:
i) Если <тип данных> (<data type>) <определения столбца> (<column definition>) есть тип точных или приблизительных чисел, то столбец инициализируется численным значением <литерала> (<literal>).
ii) Если <тип данных> (<data type>) <определения столбца> (<column definition>) есть тип данных символьных строк с длиной, равной длине <литерала> (<literal>), то столбец инициализируется значением этого <литерала> (<literal>).
iii) Если <тип данных> (<data type>) <определения столбца> (<column definition>) есть тип символьных строк с длиной большей, чем длина <литерала> (<literal>), то столбец инициализируется значением <литерала> (<literal>), расширенным при необходимости символами пробела вправо до длины <типа данных> (<data type>).
c) Если <определение столбца> (<column definition>) включает <раздел умолчания> (<default clause>) со спецификацией USER, то столбец инициализируется значением, определяемым USER, расширенной символами пробела вправо до длины <типа данных> (<data type>) <определения столбца> (<column definition>).
Общие правила
<Определение ограничения на таблицу> (<table constraint definition>) фактически проверяется после выполнения каждого <оператора SQL> (<SQL statement>).
Общие правила
Пусть термин "назначенные столбцы" обозначает столбцы, идентифицируемые <именами столбцов> (<column name>) в <списке столбцов уникальности> (<unique column list>).
Ограничение уникальности обязывает T не содержать строк, назначенные столбцы которых образуют дубликаты. Две строки являются дубликатами, если значение каждого назначенного столбца в первой строке равно значению соответствующего столбца во второй строке. Ограничение фактически проверяется после выполнения каждого <оператора SQL> (<SQL statement>).
Общие правила
Ссылающаяся таблица и ссылаемая таблица удовлетворяют <определению ограничения на ссылки> (<referential constraint definition>) в том и только в том случае, когда для каждой строки ссылающейся таблицы либо:
a) Все ссылающиеся столбцы в строке содержат не неопределенные значения и существует строка в ссылаемой таблице такая, что для каждого ссылающегося столбца значение ссылающегося столбца равно значению соответствующего ссылаемого столбца, либо
b) Какой-либо ссылающийся столбец в строке содержит неопределенное значение.
Общие правила
База данных не удовлетворяет <определению проверочного ограничения> (<check constraint definition>) в том и только в том случае, когда таблица, определенная через содержащее <определение таблицы> (<table definition>), содержит строку, для которой <условие поиска> (<search condition>) есть false.
Общие правила
<Определение представления> (<view definition>) определяет представляемую таблицу. Представляемая таблица V - это таблица, которая явилась бы результатом выполнения <спецификации запроса> (<query specification>). Является ли представляемая таблица материализованной определяется в реализации.
Если V - изменяемая (updatable) таблица, то пусть T обозначает таблицу, идентифицируемую <именем таблицы> (<table name>), которое указано в первом <разделе from> (<from clause>) в <спецификации запроса> (<query specification>). Для каждой строки в V существует соответствующая строка в T, из которой получается эта строка V. Для каждого столбца в V существует соответствующий столбец в T, из которого получается этот столбец V. Занесение строки в V является занесением соответствующей строки в T. Удаление строки из V является удалением соответствующей строки из T. Модификация столбца строки в V является модификацией соответствующей строки в T.
a) Если указано WITH CHECK OPTION, и <спецификация запроса> (<query specification>) содержит <раздел where> (<where clause>), то применение к представлению <оператора вставки> (<insert statement>), <оператора модификации: позиционного> (<update statement: positioned>) или <оператора модификации: поискового> (<update statement: searched>) не должно приводить к созданию строки, для которой результат этого <раздела where> (<where clause>) есть false.
b) Если WITH CHECK OPTION не указано, то <определение представления> (<view definition>) не должно ограничивать значения данных, которые могут быть занесены в изменяемую (updatable) представляемую таблицу.
Замечание: См. Общее правило 2 в , "<Оператор вставки> (<insert statement>)", Общее правило 5 в , "<Оператор модификации: позиционный> (<update statement: positioned>)" и Общее правило 4 в , "<Оператор модификации: поисковый> (<update statement: searched>)".
Синтаксические правила
<Тип данных> (<data type>) объекта <раздела умолчания> (<default clause>) есть <тип данных> (<data type>) содержащего этот раздел <определения столбца> (<column definition>).
a) Если указан <литерал> (<literal>), то:
i) Если <тип данных> (<data type>) объекта есть тип символьных строк, то <литерал> (<literal>) должен быть <литералом символьной строки> (<character string literal>). Длина <литерала символьной строки> (<character string literal>) не должна быть больше, чем <длина> (<lenght>) <типа данных> (<data type>) объекта.
ii) Если <тип данных> (<data type>) объекта есть тип точных чисел, то <литерал> (<literal>) должен быть <литералом точного числа> (<exact numeric literal>) и должно существовать представление значения <литерала точного числа> (<exact numeric literal>) в <типе данных> (<data type>) объекта, в котором не теряются никакие значащие цифры.
iii) Если <тип данных> (<data type>) объекта есть тип приблизительных чисел, то литерал должен быть <литералом приблизительного числа> (<approximate numeric literal>) или <литералом точного числа> (<exact numeric literal>).
b) Если указано USER, то <тип данных> (<data type>) объекта должен быть типом символьных строк и <длина> (<lenght>) <типа данных> (<data type>) объекта должна быть больше или равна 18.
c) Если указано NULL, то содержащее раздел умолчания <определение столбца> (<column definition>) не должно специфицировать NO NULL.
Синтаксические правила
Пусть T обозначает таблицу, для которой определяется ограничение.
Каждое <имя столбца> (<column name>) в <списке столбцов уникальности> (<unique column list>) должно идентифицировать столбец T, и один столбец не должен указываться более одного раза.
В <определении столбца> (<column definition>) для каждого <имени столбца> (<column name>) в <списке столбцов уникальности> (<unique column list>) должно быть указано NO NULL.
В <определении таблицы> (<table definition>) должно содержаться не более одного явного или неявного <определения ограничения уникальности> (<unique constraint definition>), специфицирующего PRIMARY KEY.
Синтаксические правила
Пусть термин "ссылающаяся таблица" обозначает таблицу, для которой определяется ограничение. Пусть термин "ссылаемая таблица" обозначает таблицу, идентифицируемую <именем таблицы> (<table name>) в <ссылаемых таблице и столбцах> (<referenced table and columns>). Пусть термин "ссылающиеся столбцы" обозначает столбцы, идентифицируемые <списком столбцов ссылки> (<reference column list>) в <ссылающихся столбцах> (<referencing columns>).
a) Если в <ссылаемых таблице и столбцах> (<referenced table and columns>) указывается <имя столбца> (<column name>) или <список столбцов ссылки> (<reference column list>), то эти <имя столбца> (<column name>) или <список столбцов ссылки> (<reference column list>) должны быть идентичны <списку столбцов уникальности> (<unique column list>) в <определении ограничения уникальности> (<unique constraint definition>) ссылочной таблицы. Пусть термин "ссылаемые столбцы" обозначает столбцы, идентифицируемые этими <именем столбца> (<column name>) или <списком столбцов ссылки> (<reference column list>).
b) Если в <ссылаемых таблице и столбцах> (<referenced table and columns>) не указывается <имя столбца> (<column name>) или <список столбцов ссылки> (<reference column list>), то <определение таблицы> (<table definition>) для ссылаемой таблицы должно содержать <определение ограничения уникальности> (<unique constraint definition>), специфицирующее PRIMARY KEY. Пусть термин "ссылаемые столбцы" обозначает столбцы, идентифицируемые <списком столбцов уникальности> (<unique column list>) в этом <определении ограничения уникальности> (<unique constraint definition>).
Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) должны включать REFERENCES для каждого ссылаемого столбца.
Синтаксические правила
<Условие поиска> (<search condition>) не должно содержать <подзапроса> (<subquery>), <спецификации функции над множеством> (<set function specification>) или <спецификации цели> (<target specification>).
Каждая <спецификация столбца> (<column specification>) в <условии поиска> (<search condition>) должна ссылаться на столбец, определенный в содержащем <определении таблицы> (<table definition>).
Синтаксические правила
Если <имя таблицы> (<table name>) содержит <идентификатор полномочий> (<authorization identifier>), то этот <идентификатор полномочий> (<authorization identifier>) должен быть таким же, как и <идентификатор полномочий схемы> (<schema authorization identifier>) содержащей <схемы> (<schema>).
<Имя таблицы> (<table name>) должно быть отличным от <имени таблицы> (<table name>) любого другого <определения представления> (<view definition>) или <определения таблицы> (<table definition>) в содержащей <схеме> (<schema>).
Если <спецификация запроса> (<query specification>) является изменяемой (updatable), то представляемая таблица является изменяемой таблицей. В противном случае это только читаемая таблица.
Если какие-либо два столбца в таблице, определяемой <спецификацией запроса> (<query specification>), имеют одно и то же <имя столбца> (<column name>) или если какой-либо столбец этой таблицы является неименованным столбцом, то должен быть указан <список столбцов представления> (<view column list>).
Одно <имя столбца> (<column name>) не должно указываться более одного раза в <списке столбцов представления> (<view column list>).
Число <имен столбцов> (<column name>) в <списке столбцов представления> (<view column list>) должно быть таким же, что и степень таблицы, определяемой <спецификацией запроса> (<query specification>).
Описание таблицы, определенной через <определение представления> (<view definition>), включает имя <имя таблицы> (<table name>) и описания столбцов таблицы, специфицированной через <спецификацию запроса> (<query specification>). Если указывается <список столбцов представления> (<view column list>), то имя i-ого столбца есть i-ое <имя столбца> (<column name>) в этом <списке столбцов представления> (<view column list>).
Если <спецификация запроса> (<query specification>) содержит <раздел group by> (<group by clause>) или <раздел having> (<having clause>), не содержащиеся в <подзапросе> (<subquery>), то представляемая таблица, определенная через данное <определение представления> (<view definition>), является сгруппированной таблицей.
Если указано WITH CHECK OPTION, то представляемая таблица должна быть изменяемой (updatable).
Синтаксические правила
Пусть T обозначает таблицу, идентифицируемую <именем таблицы> (<table name>). <Привилегии> (<privileges>) определяют одну или более привилегий на T.
UPDATE (<grant column list>) специфицирует привилегию UPDATE для каждого столбца T, указанного в <списке разрешаемых столбцов> (<grant column list>). Каждое <имя столбца> (<column name>) в <списке разрешаемых столбцов> (<grant column list>) должно идентифицировать столбец T. Если <список разрешаемых столбцов> (<grant column list>) опущен, то UPDATE специфицирует привилегию UPDATE для всех столбцов T.
REFERENCES (<grant column list>) специфицирует привилегию REFERENCES для каждого столбца T, указанного в <списке разрешаемых столбцов> (<grant column list>). Каждое <имя столбца> (<column name>) в <списке разрешаемых столбцов> (<grant column list>) должно идентифицировать столбец T. Если <список разрешаемых столбцов> (<grant column list>) опущен, то REFERENCES специфицирует привилегию REFERENCES для всех столбцов T.
Применимые <привилегии> (<privileges>) для ссылки на <имя таблицы> (<table name>) определяются следующим образом:
a)
i) Если вхождение <имени таблицы> (<table name>) содержится в <схеме> (<schema>), то пусть применимым <идентификатором полномочий> (<authorization identifier>) будет <идентификатор полномочий> (<authorization identifier>), указанный как <идентификатор полномочий схемы> (<schema authorization identifier>) этой <схемы> (<schema>).
ii) Если вхождение <имени таблицы> (<table name>) содержится в <модуле> (<module>), то пусть применимым <идентификатором полномочий> (<authorization identifier>) будет <идентификатор полномочий> (<authorization identifier>), указанный как <идентификатор полномочий модуля> (<module authorization identifier>) этого <модуля> (<module>).
Формат
<module> ::=
<module name clause>
<language clause>
<module autorization clause>
[<declare cursor>...]
< procedure > ...
<language clause> ::=
LANGUAGE { COBOL | FORTRAN | PASCAL | PLI }
<module autorization clause> ::=
AUTHORIZATION <module autorization identifier>
<module autorization identifier> ::=
<autorization identifier>
Формат
<module name clause> ::=
MODULE [<module name>]
Формат
<procedure> ::=
PROCEDURE <procedure name>
<parameter declaration>...;
<SQL statment>;
<parameter declaration>::=
<parameter name> <data type>
| <SQLCODE parameter>
<SQLCODE parameter> ::=
SQLCODE
<SQL statement> ::=
<close statement>
| <commit statement>
| <delete statement positioned>
| <delete statement searched>
| <fetch statement>
| <insert statement>
| <open statement>
| <rollback statement>
| <select statement>
| <update statement positioned>
| <update statement searched>
Общие правила
Если <раздел языка> (<language clause>) <модуля> (<module>) специфицирует COBOL (соответственно FORTRAN, PASCAL, PLI) и если агент, выполняющий вызов <процедуры> (<procedure>) этого <модуля> (<module>), не является стандартной программой на языке COBOL (соответственно FORTRAN, Pascal, PL/1), то результат неопределен.
После выполнения агентом на языке программирования последнего вызова <процедуры> (<procedure>) в <модуле> (<module>) неявно выполняется <оператор фиксации> (<commit statement>) или <оператор отката> (<rollback statement>). Выбор одного из этих <операторов SQL> (<SQL statement>) определяется реализацией. Если имеет место невосстанавлваемая ошибка, то СУБД должна выполнить <оператор отката> (<rollback statement>).
Общие правила
<Раздел имени модуля> (<module name clause>) определяет необязательный <идентификатор> (<identifier>) как <имя модуля> (<module name>), определяющее содержащий <модуль> (<module>) в данном окружении.
Общие правила
<Процедура> (<procedure>) определяет процедуру, которая может вызываться определяемым реализацией агентом.
Когда процедура вызывается агентом языка программирования:
а) Если для этого агента нет активной транзакции, то транзакция фактически инициируется и связывается с этим вызовом и с последующими вызовами этим агентом любой <процедуры> (<procedure>) в содержащем <модуле> (<module>), до тех пор, пока данный агент не закончит эту транзакцию.
b) Выполняется <оператор SQL> (<SQL statement>) S данной <процедуры> (<procedure>).
а) Если S выполнен успешно, то
i) Если S - <оператор чтения> (<fetch statement>) , для которого следующая строка не существует, то в параметр SQLCODE устанавливается значение 100.
ii) Если S - <оператор вставки> (<insert statement>), для которого не нашлось ни одной возможной строки, то в параметр SQLCODE устанавливается значение 100.
iii) Если S - <оператор выборки> (<select statement>), результатом которого явилась пустая таблица, то в параметр SQLCODE устанавливается значение 100.
iv) Если S - <оператор модификации: поисковый> (<update statement: searched>) или <оператор удаления: поисковый>) (<delete statement: searched>) с поиском, для которых не нашлись объектные строки для модификации или удаления, то в параметр SQLCODE устанавливается значение 100.
v) Во всех остальных случаях в параметр SQLCODE устанавливается 0.
b) Если S выполнен неуспешно, то
i) Все изменения, произведенные над базой данных при выполнении S, аннулируются.
ii) В параметр SQLCODE устанавливается отрицательное число со значением, определяемым реализацией.
| |
Синтаксические правила
Для каждого <определения курсора> (<cursor declare>) в <модуле> (<module>) должна существовать ровно одна <процедура> (<procedure>) в этом <модуле> (<module>), которая содержит <оператор открытия> (<open statement>) со спецификацией <имени курсора> (<cursor name>), объявленного в <объявлении курсора> (<cursor declare>).
<Модуль> (<module>) должен быть ассоциирован с прикладной программой при ее выполнения. Прикладная программа должна быть ассоциирована не более чем с одним <модулем> (<module>).
Синтаксические правила
<Имя модуля> (<module name>) должно отличаться от <имени модуля> (<module name>) любого другого <модуля> (<module>) в том же окружении. Понятие окружения определяется в реализации.
Синтаксические правила
<Имя процедуры> (<procedure name>) должно отличаться от <имени процедуры> (<procedure name>) любой другой <процедуры> (<procedure>) в содержащем модуле.
<Имя параметра> <parameter name> в каждом <объявлении параметра> (<parameter declaration>) в <процедуре> (<procedure>) должно отличаться от <имени параметра> (<parameter name>) любого другого <объявления параметра> (<parameter declaration>) в этой процедуры.
Любое <имя параметра> (<parameter name>), содержащееся в <операторе SQL> (<SQL statement>) <процедуры> (<procedure>), должно быть специфицировано в <объявлении параметра> (<parameter declaration>) этой процедуры.
Если <имя столбца> (<column name>) в <операторе SQL> (<SQL statement>) совпадает с <именем параметра> (<parameter name>) в <объявлении параметра> (<parameter declaration>) <процедуры> (<procedure>), содержащей этот <оператор SQL> (<SQL statement>), то <спецификация столбца> (<column specification>), которая содержит это <имя столбца> (<column name>), должна содержать <квалификатор> (<qualifier>).
Законный вызов <процедуры> (<procedure>) должен поставлять n параметров, где n - число <объявлений параметров> (<parameter declaration>) в данной <процедуре> (<procedure>).
Процедура должна содержать ровно один <параметр SQLCODE> (<SQLCODE parameter>). На параметр, соответствующий параметру SQLCODE, ссыля4аются я0как я4на параметр SQLCODE.
<Разделом языка> (<language clause>) процедуры явля<раздел языка> (<language clause>) содержащего <модуля> (<module>).
a) Если <раздел языка> (<language clause>) специфицирует COBOL, то:
i) Типом параметра SQLCODE должен быть COMPUTATIONAL S9(PC), где PC - определяемая реализацией точность, большая или равная 4.