| 
  
 
8.7 <Оператор вставки> (<insert statement>) 
Функция
 Создает новые строки в таблице
 Формат
 
     <insert statement> ::=
         INSERT INTO <table name> [(<insert column list>)]
         {VALUES (<insert value list>)|<query specification>}
     <insert column list> ::=
                <column name> [{,<column name>}...]
     <insert value list> ::=
                <insert value> [{,<insert value>...]
     <insert value> ::=
                <value specification> | NULL
Синтаксические правила
  
-  Применимые <привилегии> (<privileges>) к <имени таблицы> (<table name>)   должны   включать INSERT.      
 Замечание: Применимые   <привилегии>  (<privileges>)  для         <имени таблицы> (<table name>) определяются  в  6.10,  "<определение  привилегий> (<privileges  definition>)". 
 -  Пусть Т обозначает таблицу,  идентифицируемую  <именем таблицы> (<table name>). Т не должна быть только читаемой таблицей или таблицей, которая идентифицируется в <разделе  from> (<from clause>) <спецификации запроса> (<query specification>) или  какого-либо  <подзапроса> (<subquery>),  содержащегося  в <спецификации запроса> (<query specification>). 
 -  Каждое  <имя столбца> (<column name>) в <списке столбцов вставки> (<insert column list>) должно идентифицировать  столбец  Т,  и один и тот же столбец не должен быть идентифицирован  более  одного  раза.  Отсутствие <списка столбцов вставки> (<insert column list>) является неявной спецификацией <списка  столбцов  вставки> (<insert  column  list>),  который  идентифицирует все столбцы Т в порядке возрастания их порядковых  позиций внутри Т. 
 -  Столбец,  идентифицированный в <списке столбцов вставки> (<insert column list>),  является объектным столбцом. 
 - 
  а) Если  указывается  <список  вставляемых   значений> (<insert value list>), то число <вставляемых значений> (<insert value>) в  этом  <списке  вставляемых значений>  (<insert  value list>) должно быть равно числу <имен столбцов>  (<column  name>)  в  <списке вставляемых столбцов> (<insert column list>). Пусть i-ый   элемент   <оператора    вставки>    (<insert statement>)  указывает на i-ую <спецификацию значения> (<value specification>) в этом <списке  вставляемых значений> (<insert value list>). 
  b) Если  указывается  <спецификация  запроса>  (<query specification>), то  степень таблицы,  специфицированной   этой   <спецификацией   запроса>   (<query specification>),  должна  быть  равна  числу  <имен столбцов> (<column  name>)  в  <списке  вставляемых столбцов>  (<insert column list>).  Пусть i-ый элемент <оператора вставки> (<insert statement>)  указывает  на i-ый столбец таблицы,  специфицированной <спецификацией запроса> (<query specification>).
 -  Если   i-ый   элемент   <оператора  вставки>  (<insert statement>) не  является   неопределенным   <значением вставки>  (<insert  statement>),  то:
  а) Если тип данных столбца таблицы Т,  указанный  i-ым <именем столбца>  (<column  name>),  является типом символьных строк длины L,  то тип данных i-ого элемента <оператора вставки> (<insert statement>) должен быть типом символьных строк  с  длиной  меньшей или равной L. 
  b) Если тип данных столбца таблицы Т,  указанный  i-ым <именем столбца>  (<column  name>),  является типом точных чисел,  то тип данных i-ого элемента <оператора  вставки> (<insert statement>) должен быть типом точных чисел. 
  c) Если тип данных столбца таблицы Т,  указанный  i-ым <именем столбца> (<column  name>),  является  типом приблизительных чисел, то тип данных i-ого элемента <оператора  вставки>  (<insert  statement>)  должен быть  типом  приблизительных чисел или типом точных чисел.
  
Общие правила
 
-  Строка вставляется по следующим шагам:
  а) Фактически создается возможная строка, как это указано в  Общих  правилах  6.4,  "<Раздел  умолчания> (<default clause>)".  Если Т - это базовая таблица В,  то  возможная  строка  включает каждый столбец В.  Если Т - это представляемая таблица,  то возможная строка включает каждый  столбец базовой таблицы В, из которой порождается Т. 
  b) Для каждого объектного столбца в  возможной  строке его значение заменяется на вставляемое значение.
  c) Возможная строка вставляется в таблицу В. 
 -  Если  Т  - представляемая таблица,  определенная через <определение представления>  (<view   definition>)   с "WITH CHECK  OPTION",  то  если <спецификация запроса> (<query specification>),  содержащаяся в  <определении представления>  (<view definition>),  включает <раздел where> (<where clause>),  не содержащийся  в  <подзапросе>   (<subquery>),  то  <условие  поиска>  (<search condition>) этого  <раздела  where>  (<where  clause>) должно быть истинным для возможной строки. 
 -  Если   указывается   <список   вставляемых   значений> (<insert value list>), то:
  а) Если i-ое <вставляемое значение>  (<insert  value>) из <списка  вставляемых  значений>  (<insert  value list>) является  <спецификацией  значения>  (<value specification>),   то  значение  столбца  возможной строки, соответствущего i-ому  объектному  столбцу, является  значением  этой  <спецификации  значения> (<value specification>). 
  b) Если  i-ое  <вставляемое значение> (<insert value>) из <списка  вставляемых  значений>  (<insert  value list>) является неопределенным значением, то значение  столбца  возможной  строки,   соответствующего i-ому  объектному столбцу,  является неопределенным значением. 
 -  Если   указывается   <спецификация   запроса>  (<query specification>),  то пусть R обозначает результат этой <спецификации запроса> (<query specification>). Если R пуст, то параметру SQLCODE присваивается значение 100, и никакая строка не вставляется.  Число созданных возможных строк равно мощности  R.  Вставляемые  значения одной возможной строки являются значениями одной строки R, и значения в одной строке R являются вставляемыми значениями одной возможной строки. 
 -  Пусть V обозначает  строку  R  или  последовательность значений специфицированных <списком вставляемых значений> (insert value list>). Тогда i-ое значение V является вставляемым значением объектного столбца, идентифицируемого i-ым <именем столбца>  (<column  name>)  в <списке вставляемых столбцов> (<insert column list>). 
 -  Пусть С обозначает объектный столбец.  Пусть v обозначает не неопределенное вставляемое значение С. 
 - 
  а) Если тип данных С есть тип символьных строк и длина v равна длине С, то значение С устанавливается в v. 
  b) Если тип данных С есть тип символьных строк и длина M v меньше L,  то первые M символов C  устанавливаются  в  v,  и  в последние L-M символы C заносится символ пробела. 
  c) Если тип данных С есть тип точных чисел,  то должно существовать представление значения v в типе данных С такое,  чтобы не потерялись никакие первые значащие цифры, и это представление становится значением С. 
  d) Если тип данных С есть тип  приблизительных  чисел, то значением  С становится приблизительное значение v.
  
8.8. <Оператор открытия> (<open statement>) 
Функция
 Открывает курсор
 Формат
 
     <open statement> ::=
               OPEN <cursor name>
Синтаксические правила
  
-  Содержащий  <модуль> (<module>) должен содержать <объявление курсора> (<declare cursor>) CR с тем же  <именем  курсора>  (<cursor  name>),  что  и <имя курсора> (<cursor  name>)   в   <операторе   открытия>   (<open statement>).
  
Общие правила
  
-  Курсор CR должен быть в закрытом состоянии. 
 -  Пусть S  обозначает  <спецификацию  курсора>  (<cursor specification> курсора CR. 
 -  Курсор CR переводится в открытое состояние  следующими шагами:
  а) Фактически создается  копия  S,  в  которой  каждая <спецификация цели>  (<target specification>) заменяется на значение идентифицируемой цели. 
  b) Если  S  специфицирует только читаемую таблицу,  то эта таблица фактически создается в соответствии  со спецификацией - копией S. 
  c) Курсор CR переводится в открытое  состояние  и  его позиция устанавливается перед первой строкой таблицы.
  
8.9. <Оператор отката> (<rollback statement>) 
Функция
 Завершает текущую транзакцию с откатом.
 Формат
 
     <rollback statement> ::=
               ROLLBACK WORK
Синтаксические правила
 Нет.
 Общие правила
  
-  Любые  изменения  базы  данных,  совершенные в текущей транзакции, аннулируются. 
 -  Любой курсор, открывавшийся в текущей транзакции, закрывается. 
 -  Текущая транзакция завершается.
  
8.10. <Оператор выборки> (<select statement>) 
Функция
 Выбирает значения из специфицированной строки таблицы.
 Формат
 
     <select statement> ::=
         SELECT [ALL | DISTINCT] <select name>
         INTO <select target list>
         <table expression>
     <select target list>::=
         <target specification> [{,<target specification>}...]
Синтаксические правила
  
-  Применимые  <привилегии>  (<privileges>)  для  каждого <имени таблицы> (<table name>) должны включать SELECT. 
  Замечание: Применимые   <привилегии>  (<privileges>)  для <имени таблицы> (<table name>) определяются  в 6.10,  "<определение  привилегий> (<privileges definition>)". 
 -  <Выражение,    <вырабатывающее    таблицу>     (<table expression>) не  должно  включать  <раздел  group  by> (<group by  clause>)  или  <раздел   having>   <having clause>  и  не должно идентифицировать сгруппированное представление. 
 -  Число  элементов  в  <списке  выборки> (<select list>) должно быть таким же,  как число элементов  в  <списке целей выборки> (<select target list>). 
 - 
  а) Если тип данных цели, указанной i-ой <спецификацией цели> (<target specification>) в <списке целей  выборки> (<select target list>),  является типом символьных строк,  то тип данных i-ого <выражения, вырабатывающего значение>   (<value   expression>)  в <списке выборки> (<select list>) должен быть  типом символьных строк. 
  b) Если тип данных цели, указанной i-ой <спецификацией цели>  (<target specification>) в <списке целей выборки> (<select target list>), является типом целых чисел, то тип данных i-ого <выражения, вырабатывающего значение> (<value expression>) в  <списке  выборки>  (<select  list>)  должен  быть типом точных чисел. 
  c) Если тип данных цели, указанной i-ой <спецификацией цели> (<target specification>) в <списке целей  выборки> (<select target list>),  является типом приблизительных чисел, то тип данных i-ого <выражения, вырабатывающего значение> (<value expression>) <списке выборки> (<select list>) должен быть  типом приблизительных чисел. 
 -  Пусть  S  обозначает  <спецификацию  запроса>  (<query specification>) с  теми  же <списком выборки> (<select list>) и <выражением,  вырабатывающим таблицу> (<table expression>),  какие  указаны  в  <операторе  выборки> (<select statement>),  и содержащий ALL или  DISTINCT, если  они  присутствуют в <операторе выборки> (<select statement>).  S должна быть допустимой  <спецификацией запроса> (<query specification>).
  
Общие правила
  
-  Пусть  R  обозначает  результат <спецификации запроса> (<query specification>) S. 
 -  Мощность R не должна быть больше единицы. Если R пуст, то параметру SQLCODE присваивается значение  100  и  и значения не присваиваются целям,  идентифицированным в <списке целей выбора> (<select target list>). 
 -  Если  R  не  пуст,  то значения строки R присваиваются соответствующим целям. 
 -  Присваивание  значений целям из <списка целей выборки> (<select target list>),  кроме параметра SQLCODE, осуществляются в порядке, определяемом реализацией. Параметр SQLCODE получает значение последним. 
 -  Если  в  процессе присваивания значений целям фиксируется ошибка, то в параметр SQLCODE устанавливается отрицательное значение, определяемое реализацией, и значения целей, отличных от параметра SQLCODE, зависят от реализации. 
 -  Цель,  идентифицированная i-той  <спецификацией  цели> (<target specification>)  из  <списка  целей  выборки> (<select target list>), соответствует i-ому значению в строке R. 
 -  Пусть V обозначает  идентифицированную  цель,  а  v  соответствующее значение в строке R. 
 -  Если v является неопределенным  значением,  то  для  V должен быть специфицирован индикатор, и этот индикатор устанавливается в -1.  Если v - не неопределенное значение, и V имеет индикатор, то:
  а) Если тип данных V есть тип символьных строк длины L и длина M v больше L,  то индикатор получает значение M. 
  b) В противном случае значение индикатора устанавливается в 0.  -  
  a) Если тип данных V есть тип символьных строк, и длина v равна длине V, то значением V становится v. 
  b) Если тип данных V есть тип символьных  строк  длины L,  и  длина v больше L,  то значением V становятся первые L символов v. 
  c) Если  тип  данных V есть тип символьных строк длины L, и длина M v меньше L, то значением первых M символов V становится v,  и в последние L-M символов V устанавливается символ пробела. 
  d) Если тип данных V есть тип точных чисел,  то должно существовать представление значения v в типе данных V такое,  чтобы не потерялись никакие первые значащие цифры, и значением V становится это представление. 
  e) Если тип данных V есть тип  приблизительных  чисел, то  значением V становится приблизительное значение v.
  
8.11. <Оператор   модификации:   позиционный>    (<update   statement: positioned>) 
Функция
 Модифицирует строку таблицы.
 Формат
 
     <update statement: positioned> ::=
               UPDATE <table name>
               SET <set clause:positioned>
                   [{,<set clause:positioned>}...]
               WHERE CURRENT OF <cursor name>
     <set clause: positioned> ::=
               <object column:positioned> =
               { <value expressionession> | NULL }
     <object column: positioned> ::= <column name>
Синтаксические правила
  
-  "Применимые <привилегии> (<privileges>)" к <имени таблицы> (<table name>) должны включать привилегию UPDATE для   каждого   <объектного   столбца:   позиционного> (<object column: positioned>).
  Замечание: "Применимые  <привилегии>  (<privileges>)" для <имени таблицы> (<table name>) определяются  в 6.10,  "<определение  привилегий> (<privileges definition>)". 
 -  Содержащий  <модуль> (<module>) должен содержать <объявление курсора> (<declare cursor>) CR с тем же  <именем  курсора>  (<cursor  name>),  что  и <имя курсора> (<cursor name>) в <операторе модификации: позиционном> (<update statement: positioned>). 
 -  Таблица, на которую указывает CR, не должна быть только читаемой. 
 -  Пусть Т обозначает таблицу,  идентифицируемую  <именем таблицы> (<table name>). Т должна быть таблицей, идентифицированной в первом <разделе from> (<from clause>) <спецификации курсора> (<cursor specification>) CR. 
 -  <Выражение,    вырабатывающее    значение>     (<value expression>) в <разделе установки:  позиционной> (<set clause: positioned>) не должно включать  <спецификацию функции     над     множеством>     (<set     function specification>). 
 -  Каждое <имя столбца> (<column name>),  специфицированное как  <объектный  столбец:  позиционный>   (<object column:  positioned>), должно идентифицировать столбец T. Один  <объектный  столбец:  позиционный>   (<object column: positioned>) не должен появляться более одного раза в <операторе модификации:  позиционном>  (<update statement: positioned>). 
 -  Область  действия <имени таблицы> (<table name>) - целиком весь    оператор    <модификации:   позиционный> (<update statement: positioned>). 
 -  Для  каждого  <раздела установки:  позиционного> (<set clause:  positioned>):
  а) Если специфицировано неопределенное значение, то    для столбца,  указанного <объектным столбцом: позиционным> (<object column:  positioned>), должно до   пускаться неопределенное значение.
  b) Если  тип  данных  столбца,  указанного  <объектным столбцом: позиционным>       (<object       column: positioned>), является типом символьных строк длины L, то тип данных <выражения, вырабатывающего значение>  (<value  expression>)  должен быть типом символьных строк с длиной, меньшей или равной L. 
  c) Если  тип  данных  столбца,  указанного  <объектным столбцом: позиционным>       (<object       column: positioned>),  является типом точных чисел,  то тип данных   <выражения,   вырабатывающего    значение> (<value   expression>)  должен  быть  типом  точных чисел. 
  d) Если  тип  данных  столбца,  указанного  <объектным столбцом: позиционным>       (<object       column: positioned>), является типом приблизительных чисел, то тип данных <выражения, вырабатывающего значение> (<value  expression>)  должен  быть типом приблизительных чисел или типом точных чисел.
  
Общие правила
  
-  Курсор CR должен быть установлен на строку. 
 -  Объектная строка является такой  строкой,  из  которой порождена текущая строка CR. 
 -  Объектная строка модифицируется согласно  спецификации каждого <раздела установки: позиционной> (<set clause: positioned>). <Раздел  установки:  позиционной>  (<set clause: positioned>) специфицирует объектный столбец и значение модификации этого столбца.  Объектный столбец - это столбец, идентифицированный <объектным столбцом: позиционным> (<object column:  positioned>) в <разделе установки: позиционной>  (<set  clause:  positioned>). Значение  модификации может быть неопределенным значением или значением, специфицируемым <выражением, вырабатывающим значения> (<value expression>). Если <выражение,  вырабатывающее значение> (<value  expression>) содержит  ссылку к столбцу Т,  то эта ссылка указывает на значение этого столбца в объектной строке до  модификации любого значения объектной строки. 
 -  Объектная строка модифицируется по следующим шагам:
  а) Создается возможная строка, которая является копией объектной строки. 
  b) Для каждого <раздела установки:  позиционной> (<set clause: positioned>) значение указанного объектного столбца в возможной строке заменяется на специфицированное значение модификации. 
  c) Объектная строка заменяется на возможную строку. 
 -  Если Т- это представляемая таблица, определенная через <определение представления>   (<view   definition>)  с "WITH CHECK OPTION",  то если  <спецификация  запроса> (<query  specification>),  содержащееся в <определении представления> (<view definition>),  включает  <раздел where>  (<where  clause>),  не содержащийся в <подзапросе>  (<subquery>),  то  <условие  поиска>   (<search condition>)  этого  <раздела  where>  (<where clause>) должно быть true для возможной строки. 
 -  Пусть С обозначает объектный столбец.  Пусть v обозначает не неопределенное значение модификации С. 
 - 
  a) Если тип данных C есть тип символьных строк, и длина v равна длине C, то значением C становится v. 
  b) Если  тип  данных C есть тип символьных строк длины L, и длина M v меньше L, то значением первых M символов C становится v,  и в последние L-M символов C устанавливается символ пробела. 
  c) Если тип данных C есть тип точных чисел,  то должно существовать представление значения v в типе данных C такое,  чтобы не потерялись никакие первые значащие цифры, и значением C становится это представление. 
  d) Если тип данных C есть тип приблизительных чисел, то значением C становится приблизительное значение v.
  
8.12 <Оператор модификации: поисковый> (<update  statement: searched>) 
Функция
 Модифицирует строки таблицы.
 Формат
 
     <update statement: searched> ::=
               UPDATE <table name>
               SET <set clause: searched>
                   [{,<set clause: searched>}...]
               [WHERE  <search conditions>]
     <set clause: searched> ::=
               <object column: searched> =
                { <value expression> | NULL }
     <object column: searched> ::= <column name>
Синтаксические правила
  
-  "Применимые  <привилегии>  (<privileges>)"  для <имени таблицы> (<table name>)  должны  включать  UPDATE  для каждого  <имени столбца:  поискового> (<object column: searched>). 
  Замечание: Применимые <привилегии>  (<privileges>)  для    <имени таблицы> (<table name>) определяются  в  6.10,  "<определение  привилегий> (<privileges definition>)". 
 -  Пусть  Т обозначает таблицу,  идентифицируемую <именем таблицы> (<table name>). Т не должна быть только читаемой таблицей или таблицей, которая идентифицируется в <разделе from>  (<from  clause>)  любого  <подзапроса> (<subquery>),   содержащегося   в   <условии   поиска> (<search condition>). 
 -  <Выражение,     вырабатывающее    значение>    (<value expression>) в <разделе  установки:  поисковой>  (<set clause: searched>)  не  должно  включать <спецификацию функции над      множеством>      (<set       function specification>). 
 -  Каждое <имя столбца> (<column name>),  специфицированное как   <объектный   столбец:   поисковый>  (<object column: searched>), должно идентифицировать столбец T. Один <объектный  столбец:  поисковый> (<object column: searched>) не должен появляться более  одного  раза  в <операторе модификации: поисковом> (<update statement: searched>). 
 -  Область  действия <имени таблицы> (<table name>) - целиком  <оператор  модификации:   поисковый>   (<update statement: searched>. 
 -  Для  каждого  <раздела  установки:  поискового>  (<set clause: searched>):
  а) Если специфицировано  неопределенное  значение,  то для  столбца,  указанного <объектным столбцом:  поисковым> (<object column:  searched>),  должно  допускаться неопределенное значение. 
  b) Если  тип  данных  столбца,  указанного  <объектным столбцом:  поисковым> (<object column:  searched>), является типом символьных строк  длины  L,  то  тип данных    <выражения,   вырабатывающего   значение> (<value expression>) должен быть  типом  символьных строк с длиной меньшей или равной L. 
  c) Если  тип  данных  столбца,  указанного  <объектным столбцом:  поисковым> (<object column:  searched>), является типом точных чисел, то тип данных <выражения, вырабатывающего значение> (<value expression>) должен быть типом точных чисел. 
  d) Если  тип  данных  столбца,  указанного  <объектным столбцом:  поисковым> (<object column:  searched>), является типом приблизительных чисел, то тип данных <выражения,   вырабатывающего   значение>   (<value expression>)   должен  быть  типом  приблизительных чисел или типом точных чисел.
  
Общие правила
 
- 
  а) Если  не  специфицировано <условие поиска> (<search condition>),  то все строки  Т  являются  объектными строками. 
  b) Если условие поиска специфицировано, то это условие применяется  к  каждой  строке Т с <именем таблицы> (<table name>), связанным с этой строкой, и объектными строками являются все строки,  для которых результат <условия поиска> (<search condition>)  есть true.  Каждый  <подзапрос>  (<subquery>) в <условии поиска> (<search condition>) фактически выполняется для  каждой строки T,  и результат используется при применении <условия поиска> (<search condition>)  к данной строке Т.  Если какой-либо выполняемый <подзапрос> (<subquery>)  содержит  внешнюю  ссылку  на столец Т, то она указывает на значение этого столбца в данной строке Т.
  Замечание: "Внешняя ссылка" определяется в 5.7, "<column    specification">. 
 -  Каждая объектная строка модифицируется согласно спецификации каждого  <раздела установки:  поисковой> (<set clause:  searched>).  <Раздел  установки:   поисковой> (<set clause: searched>) специфицирует объектный столбец и значение модификации  этого  столбца.  Объектный столбец  - это столбец,  идентифицированный <объектным столбцом: поисковым> (<object column: searched>). Значение  модификации может быть неопределенным значением или значением,  специфицируемым <выражением, вырабатывающим  значения> (<value expression>).  Если <выражение, вырабатывающее значение> (<value expression>) содержит ссылку к столбцу Т,  то эта ссылка указывает на значение этого столбца в объектной строке до модификации любого значения объектной строки. 
 -  Объектная строка модифицируется по следующим шагам:
  а) Создается возможная строка, которая является копией объектной строки. 
  b) Для  каждого  <раздела установки:  поисковой> (<set clause: searched>) значение  указанного  объектного столбца в возможной строке заменяется на специфицированное значение модификации. 
  c) Объектная строка заменяется на возможную строку. 
 -  Если Т- это представляемая таблица, определенная через <определение представления>   (<view   definition>)  с "WITH CHECK OPTION",  то если  <спецификация  запроса> (<query  specification>),  содержащееся в <определении представления> (<view definition>),  включает  <раздел where>  (<where  clause>),  не содержащийся в <подзапросе>  (<subquery>),  то  <условие  поиска>   (<search condition>)  этого  <раздела  where>  (<where clause>) должно быть true для возможной строки. 
 -  Пусть С обозначает объектный столбец.  Пусть v обозначает не неопределенное значение модификации С.
  a) Если тип данных C есть тип символьных строк, и длина v равна длине C, то значением C становится v. 
  b) Если  тип  данных C есть тип символьных строк длины L, и длина M v меньше L, то значением первых M символов C становится v,  и в последние L-M символов C устанавливается символ пробела. 
  c) Если тип данных C есть тип точных чисел,  то должно существовать представление значения v в типе данных C такое,  чтобы не потерялись никакие первые значащие цифры, и значением C становится это представление. 
  d) Если тип данных C есть тип приблизительных чисел, то значением C становится приблизительное значение v.
  
Назад | Содержание | Вперед 
 
 | 
 |