| 
  
 
6.4 <Раздел умолчания> (<default clause>) 
Функция
 Специфицирует умолчание    для    <определения   столбца> (<column definition>).
 Формат
 
     <default clause> ::=
                DEFAULT { <literal> | USER | NULL }
Синтаксические правила
  
-  <Тип данных> (<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.
  
Общие правила
  
-  Когда  строка  заносится в таблицу,  специфицированную содержащим раздел  умолчания  <определением   таблицы> (<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>).
  
6.5 <Определение ограничения на таблицу> (<table  constraint definition>) 
Функция
 Специфицирует ограничение целостности.
 Формат
 
     <table constraint definition> ::=
                  <unique constraint definition>
                | <referential constraint definition>
                | <check constraint definition>
Синтаксические правила
 Нет.
 Общие правила
  
-  <Определение   ограничения   на    таблицу>    (<table constraint definition>)  фактически  проверяется после выполнения каждого <оператора SQL> (<SQL statement>).
  
6.6 <Определение ограничения уникальности> (<unique  constraint definition>) 
Функция
 Специфицирует ограничение уникальности для таблицы.
 Формат
 
     <unique constraint definition> ::=
               <unique specification> (<unique column list>)
     <unique specification> ::=
               UNIQUE | PRIMARY KEY
     <unique column list> ::=
               <column name> [{,<column name>}...]
Синтаксические правила
  
-  Пусть T обозначает таблицу,  для которой  определяется ограничение. 
 -  Каждое <имя столбца> (<column name>) в <списке  столбцов уникальности> (<unique column list>) должно  идентифицировать столбец T,  и один столбец не должен указываться более одного раза. 
 -  В <определении столбца> (<column definition>) для каждого <имени столбца> (<column name>) в <списке  столбцов  уникальности>  (<unique column list>) должно быть указано NO NULL. 
 -  В  <определении  таблицы>  (<table definition>) должно содержаться не более одного явного или неявного <определения ограничения уникальности> (<unique  constraint definition>), специфицирующего PRIMARY KEY.
  
Общие правила
  
-  Пусть термин "назначенные столбцы" обозначает столбцы, идентифицируемые <именами  столбцов> (<column name>) в <списке столбцов уникальности> (<unique column list>). 
 -  Ограничение  уникальности  обязывает  T  не  содержать строк, назначенные столбцы которых образуют дубликаты. Две строки являются дубликатами, если значение каждого назначенного  столбца  в  первой строке равно значению соответствующего столбца во второй строке. Ограничение фактически  проверяется после выполнения каждого <оператора SQL> (<SQL statement>).
  
6.7 <Определение  ограничения  на ссылки> (<referential constraint definition>) 
Функция
 Специфицирует ограничение на ссылки.
 Формат
 
     <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>}...]
Синтаксические правила
  
-  Пусть термин "ссылающаяся таблица" обозначает таблицу, для которой  определяется  ограничение.  Пусть  термин "ссылаемая таблица" обозначает таблицу, идентифицируемую <именем таблицы> (<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 для каждого ссылаемого столбца.
  Замечание: "Применимые <привилегии>  (<privileges>)"  для <имени таблицы> (<table name>) определяются  в 6.10,  "<определение  привилегий> (<privileges definition>)". 
 -  Ссылаемая таблица должна являться базовой таблицей. 
 -  Каждый  ссылающийся  столбец  должен  идентифицировать столбец ссылающейся таблицы, и одно и то же имя столбца не должно указываться  более  одного  раза.  Каждый ссылаемый столбец должен идентифицировать столбец ссылаемой таблицы,  и одно и то же имя столбца не  должно указываться более одного раза. 
 -  <Ссылающиеся столбцы> должны  содержать  то  же  число имен столбцов,  что  и  <ссылаемые  таблица и столбцы> (<referenced table and columns>).  I-ый столбец, идентифицируемый  в  <ссылающихся  столбцах> (<referencing columns>), соответствует i-ому столбцу, идентифицируемому  в  <ссылаемых  таблице  и столбцах> (<referenced table and columns>).  Тип данных каждого  ссылающегося столбца  должен быть таким же,  как и тип данных соответствующего ссылаемого столбца.
  
Общие правила
  
-  Ссылающаяся  таблица и ссылаемая таблица удовлетворяют <определению ограничения   на   ссылки>  (<referential constraint definition>) в том и только в  том  случае, когда для каждой строки ссылающейся таблицы либо:
 a) Все ссылающиеся столбцы в строке содержат не  неопределенные значения и существует строка в ссылаемой таблице такая, что для каждого ссылающегося столбца значение  ссылающегося столбца равно значению соответствующего ссылаемого столбца, либо
 b) Какой-либо  ссылающийся  столбец  в строке содержит неопределенное значение.
  
6.8 <Определение проверочного ограничения> (<check  constraint definition>) 
Функция
 Специфицирует условие для таблицы.
 Формат
 
     <check constraint definition> ::=
               CHECK (<search condition>)
Синтаксические правила
  
-  <Условие поиска> (<search condition>) не должно содержать <подзапроса> (<subquery>),  <спецификации функции над множеством>  (<set  function  specification>)  или <спецификации цели> (<target specification>). 
 -  Каждая <спецификация столбца> (<column specification>) в <условии  поиска>  (<search  condition>) должна ссылаться на столбец,  определенный в содержащем <определении таблицы> (<table definition>).
  
Общие правила
  
-  База данных не удовлетворяет <определению проверочного ограничения> (<check constraint definition>) в  том  и только в том случае, когда таблица, определенная через содержащее <определение таблицы> (<table definition>), содержит строку, для которой <условие поиска> (<search condition>) есть false.
  
6.9 <Определение представления> (<view definition>) 
Функция
 Определяет представляемую таблицу.
 Формат
 
     <view definition> ::=
               CREATE VIEW <table name> [(<view column list>)]
               AS <query specification>
               [WITH CHECK OPTION]
     <view column list> ::=
               <column name> [{,<column name>}...]
Синтаксические правила
  
-  Если  <имя таблицы> (<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).
  
Общие правила
  
-  <Определение представления> (<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 в 8.7, "<Оператор вставки> (<insert statement>)",  Общее правило 5 в 8.11,  "<Оператор модификации: позиционный> (<update  statement:  positioned>)" и Общее  правило  4  в  8.12, "<Оператор модификации:   поисковый>  (<update statement: searched>)".
  
6.10 <Определение привилегий> (<privilege definition>)
Функция
 Определяет привилегии.
 Формат
 
     <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>
Синтаксические правила
  
-  Пусть 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>).
 
 b)
  i) Если   применимый   <идентификатор   полномочий> (<authorization identifier>) является таким  же, как  <идентификатор  полномочий> (<authorization identifier>),  явно или неявно специфицированный  в <имени таблицы> (<table name>), то:
-  Если T  -  базовая  таблица,  то  применимыми <привилегиями> (<privileges>) являются INSERT,  SELECT, UPDATE, DELETE и REFERENCES, и эти <привилегии> (<privileges>) могут передаваться.
 -  Если T - представляемая таблица и не является изменяемой (updatable), то применимой <привилегией> (<privilege>) является SELECT,  и эта привилегия может  передаваться тогда и только тогда, когда  могут  передаваться  применимые привилегии  SELECT  ко  всем <именам таблиц>, содержащимся в <спецификации запроса> (<query specification>).
 -  Если T - изменяемая (updatable)  представляемая таблица, то применимыми на T <привилегиями> (<privileges>) являются все  <привилегии> (<privileges>) (кроме REFERENCES), применимые  на <имени таблицы> (<table name>) T2, указанном  в <разделе from> (<from clause>) <спецификации  запроса>  (<query   specification>). Привилегия является передаваемой на T в том и только в том случае, когда она является передаваемой  на T2.
  
  ii) Если   применимый   <идентификатор   полномочий> (<authorization  identifier>)  не является таким  же, как  <идентификатор  полномочий> (<authorization  identifier>),  явно  или неявно специфицированный  в  <имени  таблицы>   (<table name>),  то  применимые <определения привилегий> (<privileges definition>) включают все  <определения привилегий> (<privileges definition>), для которых <имя таблицы> (<table name>)  такое  же, как  данное <имя таблицы> (<table name>),  и для которых <получающие> (<grantee>)  либо  включают применимый  <идентификатор   полномочий> (<authorization  identifier>),   либо   включают  PUBLIC, и применимые <привилегии> (<privileges>) содержат все  привилегии,  специфицированные   в применимых  <определениях  привилегий> (<privileges definition>).  Привилегия  является передаваемой в том и только в том случае,  когда она указана в числе <привилегий>  (<privileges>) некоторого  применимого <определения привилегии> (<privilege definition>), в котором указано WITH  GRANT  OPTION и указан применимый <идентификатор полномочий> (<authorization identifier>). 
 
 -  ALL эквивалентно списку <действий> (<action>), включающему все применимые  <привилегии>  (<privileges>)  на данном <имени таблицы> (<table name>). 
 -  Применимые <привилегии> (<privileges>) для <имени таблицы> (<table   name>)   из  <определения  привилегий> (<provileges definition>) должны включать <привилегии> (<privileges>),  указанные  в <определении привилегий> (<privileges definition>).
  
Общие правила
 Нет.
 
Назад | Содержание | Вперед 
 
 | 
 |