ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.






                      Справочник по SQL - операторам         5-123


E         ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                   F

E         ROLLBACK                                      F


         Назначение Отмена работы, выполненной в текущей транзакции.

         Предпосылки Нет.

         Синтаксис  ROLLBACK [WORK]
                      [ TO [SAVEPOINT] savepoint ]

         Ключевые   WORK             необязательный параметр, обеспе-
         слова и                     чивающий ANSI - совместимость.
         параметры  SAVEPOINT        необязательный параметр, исполь-
                                     зующийся для  частичного  отката
                                     транзакции к   специфицированной
                                     точке сохранения.
                    savepoint        имя точки  сохранения, сделанной
                                     в текущей транзакции.

         Замечания  Транзакция (или  логическая единица работы) - это
         по исполь- последовательность SQL  -   операторов,   которые
         зованию    ORACLE трактует как единое целое.  Транзакция на-
                    чинается с первого выполнимого  SQL  -  оператора
                    после COMMIT,  ROLLBACK  или присоединения к базе
                    данных. Транзакция завершается оператором COMMIT,
                    ROLLBACK или  при  отсоединении  от  базы  данных
                    (преднамеренном или  случайном).  Заметьте,   что
                    ORACLE неявно  выдает  команду  COMMIT до и после
                    любого DDL - оператора. За полным описанием тран-
                    закций и  обработки транзакций обратитесь к Главе
                    11 - "Управление транзакциями"  документа "ORACLE
                    RDBMS Руководство администратора базы данных".

                    Использование оператора    ROLLBACK   без   фразы
                    SAVEPOINT:

                         * завершает транзакцию
                         * отменяет все изменения текущей транзакции
                         * очищает все точки сохранения данной  тран-
                           закции
                         * освобождает блокировки данной транзакции

                    Использование оператора   ROLLBACK    с    фразой
                    SAVEPOINT:

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

                                   -- 226 --



                           ются.
                         * освобождает все блокировки строк и таблиц,
                           которые были  выполнены после данной точки
                           сохранения.
                           
                  Справочное руководство по языку SQL        5-124


                    На практике рекомендуется в программах  пользова-
                    теля завершать транзакции явно с помощью операто-
                    ров COMMIT WORK или ROLLBACK WORK.  Если Вы  явно
                    не завершите  транзакцию  и  прикладная программа
                    завершится аварийно,  последняя   не   записанная
                    транзакция будет откачена.

         Пример     Для отката всей транзакции введите:

                    ROLLBACK

                    Для отката к точке сохранения SP5 введите:

                    ROLLBACK TO SAVEPOINT SP5

         Связанные  Операторы COMMIT,   SET  TRANSACTION,  SAVEPOINT.
         темы       Глава 11 -  "Управление  транзакциями"  документа
                    "ORACLE  RDBMS  Руководство  администратора  базы
                    данных".
             
                      Справочник по SQL - операторам         5-125






























                                   -- 227 --




E         ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                   F

E         ROLLBACK (Встроенный SQL)                     F


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

         Предпосылки Нет.

         Синтаксис  EXEC SQL [AT dbname] ROLLBACK [WORK]
                         [TO  [SAVEPOINT] savepoint]
                         [RELEASE]


         Ключевые   AT dbname        необязательная фраза, определяю-
         слова и                     щая имя  базы данных,  где будет
         параметры                   выдана команда ROLLBACK.

                    WORK             необязательна и  не  влияет   на
                                     ROLLBACK

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

                    RELEASE          необязательный параметр,   осво-
                                     бождающий все ресурсы и отсоеди-
                                     няющий Вас от базы данных.

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

                    ORACLE автоматически откатывает  изменения,  если
                    программа завершилась аварийно.

                    Оператор ROLLBACK  WORK  не  оказывает влияния на
                    содержание host - переменных и последовательность
                    выполнения команд программы.

         Связанные  Операторы COMMIT, SAVEPOINT и SET TRANSACTIONS.
         темы
                    
                  Справочное руководство по языку SQL        5-126


                                   -- 228 --




E         ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                   F
                                                         
E         SAVEPOINT                                     F

         Назначение Определение точки в транзакции,  к которой Вы мо-
                    жете впоследствии откатиться с  помощью оператора
                    ROLLBACK TO SAVEPOINT.

         Предпосылки Нет.

         Синтаксис  SAVEPOINT savepoint

                    или во встроенном SQL:

                    EXEC SQL SAVEPOINT savepoint

         Ключевые   savepoint        имя точки сохранения, которую Вы
         слова и                     хотите создать. Имя точки сохра-
         параметры                   нения  - это идентификатор SQL и
                                     должно  подчиняться  стандартным
                                     соглашениям по именованию объек-
                                     тов (кроме отсутствия  необходи-
                                     мости  разниться  от имен других
                                     объектов базы данных.

         Замечания  Точки сохранения используются совместно с  опера-
         по исполь- тором ROLLBACK  для отката части текущей транзак-
         зованию    ции.
                    По умолчанию  максимальное число точек сохранения
                    на транзакцию равно 5.  Активная точка сохранения
                    - такая,  которая  была  сделана  после  операции
                    COMMIT или ROLLBACK.  Это ограничение может  быть
                    изменено путем   изменения   значения   параметра
                    SAVEPOINTS файла INIT.ORA.
                    Точки сохранения  полезны в интерактивных програм-
                    мах, так как Вы можете создать и поименовать про-
                    межуточные стадии некоторой процедуры.  Это дает
                    Вам большие возможности по  управлению  большими,
                    комплексными процедурами. Например, Вы можете ис-
                    пользовать точки сохранения внутри многочисленных
                    изменений, что позволит в случае ошибки не повто-
                    рять заново все предыдущие шаги.
                    Точки сохранения  полезны  также  и  в прикладных
                    программах следующего типа:  если процедура вклю-
                    чает в  себя несколько функций,  точки сохранения
                    могут быть установлены перед началом каждой. Тог-
                    да, если  функция завершится аварийно, информацию
                    базы легко будет вернуть к состоянию, предшеству-
                    ющему функции и выполнить ее заново с модифициро-
                    ванными параметрами или предпринять  действия  по
                    восстановлению.
                    Имена точек сохранения внутри  данной  транзакции
                    должны отличаться друг от друга. Если Вы создаете
                    вторую точку сохранения с идентификатором,  кото-
                    рый уже использовался в предыдущей точке сохране-
                    ния, вторая перекрывает  первую.  После  создания
                    контрольной точки  Вы можете продолжить обра-

                                   -- 229 --



                    ботку, записать  работу  (commit),  откатить  всю
                    транзакцию или откатиться к точке сохранения.
                    
                      Справочник по SQL - операторам         5-127


         Транзакция

                    Транзакция (или  логическая единица работы) - это
                    последовательность SQL  -   операторов,   которые
                    ORACLE трактует как единое целое.  Транзакция на-
                    чинается с первого выполнимого  SQL  -  оператора
                    после COMMIT,  ROLLBACK  или присоединения к базе
                    данных. Транзакция завершается оператором COMMIT,
                    ROLLBACK или  при  отсоединении  от  базы  данных
                    (преднамеренном или  случайном).  Заметьте,   что
                    ORACLE неявно  выдает  команду  COMMIT до и после
                    любого DDL - оператора. За полным описанием тран-
                    закций и  обработки транзакций обратитесь к Главе
                    11 - "Управление транзакциями"  документа "ORACLE
                    RDBMS Руководство администратора базы данных".

         Примеры    Для изменения жалования служащим BLAKE  и  CLARK,
                    проверки, что  сумма жалований сотрудников компа-
                    нии не превышает 20000 долларов и повторного вво-
                    да жалования служащему CLARK надо ввести:

                    UPDATE EMP
                      SET SAL = 2000
                      WHERE ENAME = 'BLAKE'

                    SAVEPOINT BLAKE_SAL

                    UPDATE EMP
                      SET SAL = 1500
                      WHERE ENAME = 'CLARK'

                    SAVEPOINT CLARK_SAL

                    SELECT SUM(SAL) FROM EMP;

                    ROLLBACK TO SAVEPOINT BLAKE_SAL

                    UPDATE EMP
                      SET SAL = 1300
                      WHERE ENAME = 'CLARK'

                    COMMIT

         Связанные  Операторы COMMIT, ROLLBACK и SET TRANSACTIONS.
         темы
                    
                  Справочное руководство по языку SQL        5-128






                                   -- 230 --




E         ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                   F

E         SELECT                                        F


         Назначение Показывает строки и столбцы из одной или несколь-
                    ких таблиц.  Может  использоваться  как самостоя-
                    тельный оператор или (с определенными ограничени-
                    ями во  фразах) как запрос или подзапрос в другом
                    операторе.

         Предпосылки Необходимо быть владельцем таблицы или  иметь  к
                    ней привилегию SELECT или иметь привилегию DBA.

         Синтаксис  SELECT [ALL|DISTINCT] {* | table.* | expr [c_alias]}
                            --Д           [, {table.* | expr [c_alias]}]...
                    FROM [user.]table [t_alias][,[user.]table [t_alias]]...
                    [WHERE condition]
                    [CONNECT BY condition [START WITH condition]]
                    [GROUP BY expr [, expr]...[HAVING condition]]
                    [{UNION|INTERSECT|MINUS} SELECT ...]
                    [ORDER BY {expr|position} [ASC|DESC]
                                               --Д
                            [,{expr|position} [ASC|DESC]] ]...
                                               --
                    [FOR UPDATE OF column [,column]...[NOWAIT] ]


         Ключевые   ALL              берется по умолчанию и означает,
         слова и                     что все  строки, удовлетворяющие
         параметры                   условию оператора, будут показы-
                                     ваться.
                    DISTINCT         специфицирует, что   дублирующие
                                     строки удаляются    до   показа.
                                     Строка рассматривается дублирую-
                                     щейся, если  все соответствующие
                                     значения из списка SELECT одина-
                                     ковы для обеих строк.
                    *                специфицирует,  что показываются
                                     все столбцы таблиц из фразы FROM.
                    table.*          специфицирует,  что показываются
                                     все столбцы указанной таблицы.
                    expr             (См. описание  синтаксиса "expr"
                                     в Главе 4 -  "Операции  и  функ-
                                     ции" - данного руководства).
                    c_alias          обеспечивает имя  для  выражения
                                     из столбцов, которое будет пока-
                                     зано в  заголовке при выдаче. Не
                                     влияет на  действительные  имена
                                     столбцов. На   алиасы   столбцов
                                     нельзя ссылаться где-либо  еще в
                                     запросе.
                    [user.]table     специфицирует имя   таблицы  или
                                     обзора, подлежащих выдаче. Имени
                                     таблицы может предшествовать имя
                                     владельца; если   не    указано,
                                     предполагается пользователь, вы-

                                   -- 231 --



                                     давший запрос.
                                     
                      Справочник по SQL - операторам         5-129


                    t_alias          обеспечивает таблице  другое имя
                                     для выполнения запроса и  наибо-
                                     лее часто  используется коррели-
                                     рованных запросах. Другие ссылки
                                     к таблице всюду в данном запросе
                                     должны выполняться через алиас.
                    condition        (См. описание         синтаксиса
                                     "condition" в Главе 4 -  "Опера-
                                     ции  и  функции" - данного руко-
                                     водства).
                    position         идентифицирует относительную по-
                                     зицию столбца в списке SELECT.
                    ASC|DESC         указывает порядок     сортировки
                                     (соответственно - возрастающий и
                                     убывающий), базирующийся на пос-
                                     ледовательности слияния операци-
                                     онной системы.
                    column           столбец,  принадлежащий таблице,
                                     указанной в списке фразы FROM.
                    NOWAIT           указывает, что ORACLE должен не-
                                     медленно    вернуть   управление
                                     пользователю, если он попытается
                                     заблокировать строку, уже забло-
                                     кированную другим пользователем.

                    Многие фразы оператора SELECT описываются индиви-
                    дуально в Главе 6 - "Фразы оператора SELECT".

         Замечания  Фразы должны  использоваться  в  приведенном выше
         по исполь- порядке за исключением:
         зованию      * CONNECT BY, START WITH, GROUP BY и HAVING мо-
                        гут указываться в любом порядке.
                      * фразы ORDER BY и FOR UPDATE OF могут меняться
                        местами.

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

                    Каждое выражение  expr  приводит  к выдаче одного
                    столбца, а table.* - к выдаче нескольких столбцов
                    - по  одному на столбец таблицы (в порядке их оп-
                    ределения в момент создания таблицы).  Тип данных
                    и размер выдачи для выражения определяется на ос-
                    новании элементов выражения.




                                   -- 232 --



                    Звездочка (*) означает "все" столбцы таблицы. Ес-
                    ли во фразе FROM указано несколько таблиц,  звез-
                    дочка означает   "все   столбцы   всех   таблиц".
                    Звездочка может  быть  предварена  именем таблицы
                    (table.*), что ограничивает выдачу только  столб-
                    цами данной таблицы.
                    
                  Справочное руководство по языку SQL        5-130


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

                    FROM table  специфицирует  таблицу или обзор,  из
                    которой будут выбираться данные.  Если алиас ука-
                    зан для  таблицы,  он  должен  использоваться для
                    ссылки на данную таблицу во всей оставшейся части
                    оператора SELECT.

         CONNECT BY

                    Фраза CONNECT  BY используется для запроса иерар-
                    хических отношений.  Она  указывает,  что  строки
                    должны выдаваться в иерархическом порядке и опре-
                    деляет отношение,  используемое  для  определения
                    иерархии связи строк в таблице. Фраза PRIOR долж-
                    на указываться перед первой частью условия. PRIOR
                    означает родителя в каждом отношении "родитель" -
                    "потомок".  Другая  часть  представляет  дочернюю
                    вершину. Например, CONNECT BY PRIOR EMPNO=MGR оз-
                    начает,  что поле EMPNO  в  родительской  вершине
                    равно  полю  MGR  в каждой дочерней (порожденной)
                    вершине.  Число уровней CONNECT  BY  лимитируется
                    доступной пользователю памятью.

                    CONNECT BY нельзя использовать совместно с:

                            * подзапросами
                            * объединениями

         START WITH

                    Фраза START WITH идентифицирует строки (или стро-
                    ку), которые будут использоваться в качестве кор-
                    ня дерева,  назначая условие, которому они должны
                    удовлетворять. Отсутствие   этой  фразы  означает
                    начало со всех столбцов,  удовлетворяющих условию
                    фразы WHERE.
                    Во фразе START WITH допустимы подзапросы.
                    Если в   операторе   SELECT   используется  фраза
                    CONNECT BY,  в нем же можно воспользоваться псев-
                    достолбцом LEVEL, который возвращает 1 для корня,
                    2 - для вершины, порожденной корнем, 3 - для вну-
                    ка и т.д.

                                   -- 233 --



                    О псевдостолбце LEVEL см. также в Главе 3 - "Эле-
                    менты языка SQL",  а о фразе START WITH - в Главе
                    6 -  "Фразы оператора SELECT" - данного руководс-
                    тва.
                    
                      Справочник по SQL - операторам         5-131





















































                                   -- 234 --




         GROUP BY, HAVING

                    Фразы GROUP  BY  и HAVING используются для показа
                    обобщающей информации по группам  строк,  имеющих
                    одинаковые значения  в одном или более полях. См.
                    также фразу GROUP BY в Главе 6 данного  руководс-
                    тва.

         Множественные операции

                    Операции UNION,  INTERSECT  и MINUS комбинируют в
                    один результаты двух операторов SELECT. UNION по-
                    казывает результаты   обоих  компонент,  исключая
                    дублирующиеся; INTERSECT показывает только  стро-
                    ки, возвращенные обоими запросами;  MINUS показы-
                    вает строки,  возвращенные первым запросом  после
                    удаления строк,   возвращенных  вторым  запросом.
                    Число и типы столбцов, возвращаемых обеими компо-
                    нентами, должно   быть  одинаковым,  идентичность
                    размерности необязательна.

                    Если таким способом комбинируется более двух зап-
                    росов, смежные   пары  элементов  рассматриваются
                    сверху вниз. Для изменения порядка можно восполь-
                    зоваться скобками. Все три операции подразумевают
                    во всех SELECT фразы DISTINCT.

         ORDER BY

                    Фраза ORDER BY указывает порядок, в котором будут
                    возвращаться строки. См. подробнее фразу ORDER BY
                    в Главе 6 данного руководства.

         FOR UPDATE OF

                    Фраза FOR  UPDATE  блокирует  выбранные   строки.
                    Обычно за оператором SELECT ... FOR UPDATE следу-
                    ет один или несколько операторов UPDATE ...WHERE.
                    Когда Вы заблокировали строку, другие пользовате-
                    ли не смогут сделать то же,  пока Вы не выполните
                    команды COMMIT или ROLLBACK. (Другие пользователи
                    увидят выполненные Вами  изменения  только  после
                    выполнения Вами оператора COMMIT).

                    Фраза FOR  UPDATE означает,  что Вы намереваетесь
                    изменить строки,  выбранные, но не требует обяза-
                    тельного изменения. (Термин "изменить" включает в
                    себя операции UPDATE, DELETE и INSERT).

                    SELECT ...  FOR UPDATE нельзя  использовать  сов-
                    местно с:

                        * DISTINCT или GROUP BY
                        * UNION, INTERSECT или MINUS
                        * групповыми функциями вроде COUNT и MAX.



                                   -- 235 --



                    Фраза NOWAIT заставляет SELECT завершиться,  а не
                    ожидать, если строки, выбираемые с помощью SELECT
                    FOR UPDATE, кем-либо уже используются.
                    
                  Справочное руководство по языку SQL        5-132


         Последовательности

                    Оператор SELECT может ссылаться также на псевдос-
                    толбцы последовательностей  NEXTVAL и CURRVAL. За
                    полным описанием последовательностей и их исполь-
                    зования обратитесь   выше  к  описанию  оператора
                    CREATE SEQUENCE.

         Подзапрос

                    Обратитесь к описанию синтаксиса query в  Главе 6
                    данного руководства.


         Примеры    Чтобы показать ENAME,  SAL,  JOB  и  DEPTNO  всех
                    строк таблицы  EMP  для Отдела номер 30 и меньше,
                    введите:

                    SELECT ENAME, SAL, JOB, DEPTNO
                        FROM EMP
                        WHERE DEPTNO <= 30

         Связанные  Фразы FROM,  WHERE,  GROUP BY,  HAVING;  описание
         темы       синтаксиса simple   join  (простое  объединение),
                    outer join (внешнее объединение) и query (запрос)
                    в Главе 6 данного руководства.


                
                      Справочник по SQL - операторам         5-133






















                                   -- 236 --




E         ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                   F

E         SELECT (Встроенный SQL)                       F


         Назначение Выбирает строки из указанной таблицы.  Возвращае-
                    мые значения назначаются выходным host - переменным.

         Предпосылки Необходимо  быть  владельцем таблицы или иметь к
                    ней привилегию SELECT, или иметь привилегию DBA.

         Синтаксис   EXEC SQL [AT dbname] [FOR :host_integer]
                    SELECT select_list
                      INTO :host_variable [,:host_variable]...
                      FROM table_list
                      [WHERE condition ]
                      [CONNECT BY condition [START WITH condition]]
                      [GROUP BY expr[,expr]...[HAVING condition]]
                      [ {UNION|INTERSECT|MINUS} SELECT ...]
                      [ORDER BY {expr|position} [ASC|DESC]
                              [,{expr|position} [ASC|DESC] ] ]...
                      [FOR UPDATE OF column [,column]...[NOWAIT] ]

         Ключевые   AT dbname        необязательная фраза, ссылающая-
         слова и                     ся на   предшествующий  оператор
         параметры                   CONNECT. Это  имя  базы   данных
                                     должно быть предварительно опре-
                                     делено оператором DECLARE DATABASE.
                    FOR :host_integer ограничивает количество вбирае-
                                     мых строк.  Более подробно см. в
                                     описании фразы  FOR  в  Главе  6
                                     данного руководства.
                    select_list      идентично обычному     оператору
                                     SELECT за исключением возможнос-
                                     ти использования host - перемен-
                                     ной везде,  где  может использо-
                                     ваться константа.
                    INTO             представляет список     выходных
                                     host - переменных.  Эти перемен-
                                     ные определяются как обычные пе-
                                     ременные  процедурного  языка  и
                                     являются либо ранее определенны-
                                     ми,  либо   явно   определенными
                                     пользователем  для использования
                                     в  SQL  -  операторе.  если  ка-
                                     кая-либо  из host - переменных в
                                     списке INTO  является  массивом,
                                     массивами должны  быть и все ос-
                                     тальные, не обязательно одинако-
                                     вой размерности.
                    FROM определяется  идентично невстроенному опера-
                                     тору SELECT.  Замечание:  в  ка-
                                     честве  имен  таблиц  нельзя ис-
                                     пользовать host - переменные.
                    WHERE            может содержать ссылки на host -
                                     переменные, но не на массивы.
                    condition        логическое выражение, содержащее

                                   -- 237 --



                                     ссылки на host -  переменные или
                                     массивы. Подробнее см. в синтак-
                                     сическом описании  condition   в
                                     Главе 4 - "Операции и функции".
                                     
                  Справочное руководство по языку SQL        5-134


                    Все ключевые слова и параметры идентичны невстро-
                    енному оператору SELECT.

         Замечания  Наиболее часто встроенный оператор SELECT исполь-
         по исполь- зуется для  выборки одной строки,  однако при ис-
         зованию    пользовании массивов host - переменных в качестве
                    мишеней возможна  и выборка нескольких строк в за
                    одно выполнение оператора FETCH.

                    Если не возвращается ни  одной  строки,  оператор
                    SELECT записывает  значение  +100 (+1403 в режиме
                    совместимости с Версией 5) в sqlcode и  не меняет
                    значений host - переменных. Для передачи управле-
                    ния по условию NOT FOUND (+100) можно  воспользо-
                    ваться оператором WHENEVER.

                    Оператор SELECT  может  использоваться операторах
                    DECLARE CURSOR или PREPARE вместе  с  последующим
                    оператором FETCH.  В  этих случаях он может вклю-
                    чать фразу FOR UPDATE OF:

                    EXEC SQL DECLARE c1 CURSOR
                       FOR SELECT column [,colunmn,...]
                           FROM table|vie [,table|view ] [,...]
                           WHERE search_condition
                           FOR UPDATE OF column [,column] [,...]

                    На имена столбцов затем можно сослаться  во фразе
                    CURRENT  OF оператора UPDATE,  который следует за
                    оператором FETCH.  За деталями обратитесь выше  к
                    описанию оператора DECLARE CURSOR.

         Примеры    Следующий пример    иллюстрирует    использование
                    встроенного оператора SELECT:

                    EXEC SQL SELECT ENAME, SAL+100, JOB
                              INTO :ENAME, :SAL, :JOB
                              FROM EMP
                              WHERE EMPNO = :EMPNO;

                    Следующий пример  показывает использование опера-
                    тора SELECT:

                    EXEC SQL INSERT INTO EMP (ENAME,DEPTNO)
                        SELECT * FROM NEWHIRES

         Связанные  Операторы PREPARE, DECLARE CURSOR, FETCH и EXECUTE
         темы
                    
                      Справочник по SQL - операторам         5-135

                                   -- 238 --




E         ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                   F

E         SET TRANSACTION                               F


         Назначение Устанавливает текущую транзакцию как READ ONLY.

         Предпосылки Нет.

         Синтаксис  SET TRANSACTION {READ ONLY}

         Ключевые   READ ONLY        является необходимым параметром.
         слова и
         параметры

         Замечания  По умолчанию все транзакции  устанавливаются  для
         по исполь- поддержания согласованного  чтения на уровне опе-
         зованию    раторов. Оператор SET TRANSACTION READ ONLY может
                    явно устанавливать   согласованность   чтения  на
                    уровне транзакции.  Как только READ ONLY установ-
                    лено, все последующие операторы данной транзакции
                    могут видеть изменения, записанные до начала дан-
                    ной транзакции.  Функционально  это очень полезно
                    для отчетов, выдающих много запросов по одной или
                    нескольким таблицам  в  то  время  как  остальные
                    пользователи могут эти таблицы модифицировать.

                    Оператор SET TRANSACTION должен быть первым  опе-
                    ратором в транзакции;  если это не так, будет вы-
                    дана ошибка.  Данный оператор может быть выдан  в
                    транзакции только   однажды.  Использование  READ
                    ONLY не  оказывает  никакого  влияния  на  других
                    пользователей или транзакции. За полным описанием
                    транзакций и их обработки обратитесь к Главе 11 -
                    "Управление транзакциями"   -  документа  "ORACLE
                    RDBMS Руководство администратора базы данных".

                    В транзакции READ ONLY разрешены  только запросы,
                    операции UPDATE, DELETE и INSERT - недопустимы.

                    Состояние согласованности  чтения  будет  продол-
                    жаться до окончания транзакции, другими словами -
                    до выдачи  операторов  COMMIT  или ROLLBACK.  Как
                    указывалось выше,  операторы  DDL  неявно  выдают
                    COMMIT, следовательно  они  также будут завершать
                    транзакцию READ ONLY.  Для всех DDL -  операторов
                    пользователь не оповещается  о  неявных  операциях
                    COMMIT, но тем не менее - начинается новая  тран-
                    закция. Вы должны явно завершать свои транзакции,
                    а не полагаться на их неявное  завершение  DDL  -
                    операторами.

                    Согласованность чтения  для  транзакций READ ONLY
                    реализуется точно так же,  как и для  согласован-
                    ности на  уровне  операторов.  Каждый оператор по
                    умолчанию видит согласованные  данные  на  момент
                    его начала. Транзакции типа READ ONLY обеспечива-

                                   -- 239 --



                    ют согласованный взгляд на данные с момента выда-
                    чи оператора SET TRANSACTION.
                    
                  Справочное руководство по языку SQL        5-136


                    Когда над данными таблицы производятся изменения,
                    запись  об этих изменениях производится в сегмен-
                    тах отката базы данных.  Когда оператору встреча-
                    ется блок данных,  измененный с момента его нача-
                    ла,  ORACLE реконструирует данные, существовавшие
                    до выполнения изменений. Перед началом выполнения
                    длинных транзакций типа READ ONLY,  работающих  с
                    часто меняющимися таблицами, имеет смысл увеличить
                    число сегментов  отката  для  поддержания   таких
                    транзакций; эти действия может выполнить DBA.

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

                    COMMIT
                    SET TRANSACTION READ ONLY
                    SELECT COUNT(*) FROM SHIP
                    SELECT COUNT(*) FROM CONTAINER
                    COMMIT

                    Заметьте, что последний COMMIT реально не записы-
                    вает каких-либо изменений в базу данных, он прос-
                    то завершает READ ONLY - транзакцию.

         Связанные  Операторы COMMIT,  ROLLBACK и SAVEPOINT; Глава 11
                    -  "Управление  транзакциями" - документа "ORACLE
                    RDBMS Руководство администратора базы данных".
                    
                      Справочник по SQL - операторам         5-137




















                                   -- 240 --




E         ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                   F

E         Фраза STORAGE                                 F

         Назначение Специфицирование характеристик памяти для различ-
                    ных объектов базы данных, включая таблицы, индек-
                    сы и кластеры. Некоторые SQL - операторы содержат
                    фразы по определению памяти,  обычно предваряемые
                    ключевыми  словами STORAGE или DEFAULT STORAGE. К
                    этим операторам относятся следующие:

                    CREATE TABLESPACE
                    CREATE TABLE
                    CREATE CLUSTER
                    CREATE INDEX
                    CREATE ROLLBACK SEGMENT а  также  соответствующие
                    операторы ALTER

         Предпосылки Нет.

         Синтаксис   STORAGE (
                       [ INITIAL integer ]  [ NEXT integer ]
                       [ MINEXTENTS integer ]  [ MAXEXTENTS integer ]
                       [ PCTINCREASE integer ] )

         Ключевые   integer        см. описание синтаксиса .
         слова и    INITIAL       Размер  в  байтах первого экстента,
         параметры                распределяемого при создании объек-
                                  та  -  исходная память для объекта.
                                  По умолчанию - начальный размер эк-
                                  стента  10240  байтов.  Минимальное
                                  значение 4096 байтов,  а максималь-
                                  ное  4095 мегабайтов.  Все значения
                                  округляются к 1024  байтам  (одному
                                  килобайту).
                 NEXT             размер в байтах каждого последующе-
                                  го распределяемого экстента.  Умол-
                                  чание 10240 байтов,  минимум - 2048
                                  байтов, максимум - 4095 мегабайтов.
                                  Все значения округляются до 1 Кило-
                                  байта.

                                  Это базовое значение, которое может
                                  оставаться неизменным,  а может ме-
                                  няться  для каждого следующего экс-
                                  тента в зависимости от значения па-
                                  раметра PCTINCREASE. Если последний
                                  равен 0,  каждый следующий  экстент
                                  будет иметь одинаковый размер, рав-
                                  ный NEXT.  Если PCTINCREASE положи-
                                  телен,  каждый  последующий сегмент
                                  будет на такое количество процентов
                                  больше предыдущего.
         
                  Справочное руководство по языку SQL        5-138



                                   -- 241 --





                 MAXEXTENTS       Общее количество экстентов, включая
                                  первый,  которые могут быть распре-
                                  делены.  По умолчанию 99 экстентов.
                 MINEXTENTS       Общее количество экстентов, которое
                                  должно быть распределено при созда-
                                  нии сегмента. Это позволяет распре-
                                  делять  первоначально большее коли-
                                  чество   памяти   даже   если   нет
                                  непрерывного  участка соответствую-
                                  щего размера.  Умолчание 1, что оз-
                                  начает первоначальное распределение
                                  только одного экстента.
                                  Если MINEXTENTS больше 1,  в момент
                                  выполнения оператора CREATE распре-
                                  деляется  указанное количество экс-
                                  тентов,  основываясь  на  значениях
                                  параметров INITIAL,NEXT,PCTINCREASE.
                 PCTINCREASE      Процент, на который  будет  возрас-
                                  тать  каждый распределяемый экстент
                                  по сравнению с предыдущим. Если па-
                                  раметр  PCTINCREASE равен нулю, все
                                  экстенты будут одинакового размера.
                                  По  умолчанию PCTINCREASE равен 50.
                                  Это значение позволяет увеличивать-
                                  ся каждому следующему экстенту, что
                                  в конечном счете приводит к  умень-
                                  шению  общего  числа  экстентов  и,
                                  следовательно, снижению ввода/выво-
                                  да.  Каждый раз,  когда вычисляется
                                  NEXT,    он    будет    расти    на
                                  PCTINCREASE.  При умножении размера
                                  предыдущего  блока  на  PCTINCREASE
                                  результат округляется до ближайшего
                                  числа,  кратного   размеру   блока.
                                  PCTINCREASE  не  может быть отрица-
                                  тельным.

         Замечания  Рассмотренные параметры влияют  как  на  скорость
         по исполь- доступа  к данным в базе,  так и на эффективность
         зованию    использования  памяти.  Исчерпывающее  обсуждение
                    различных  вариантов этих параметров приводится в
                    Главе 4 - "Настройка  Ввода/Вывода"  -  документа
                    "ORACLE RDBMS Руководство по настройке производи-
                    тельности".
                    Когда параметр STORAGE используется в предложении
                    ALTER,  задаваемые им значения влияют лишь на бу-
                    дущие экстенты.

         Пример     STORAGE ( INITIAL 100K NEXT 50K
                           MINEXTENTS 1 MAXEXTENTS 50
                           PCTINCREASE 5 )

         Связанные  Операторы CREATE   TABLE,  CREATE  INDEX,  CREATE
                    CLUSTER, CREATE ROLLBACK SEGMENT.
         
                      Справочник по SQL - операторам         5-139

                                   -- 242 --




E         ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                   F

E         Ограничение для таблицы                       F

                    См. выше в этой главе "Фраза CONSTRAINT"


E         ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                   F

E         UPDATE                                        F

         Назначение Изменение данных в указанной таблице.

         Предпосылки Вы должны быть владельцем таблицы или  иметь для
                    нее привилегию UPDATE, или иметь привилегию DBA.

         Синтаксис  UPDATE [user.]table [alias]
                       SET column = expr [,column = expr]...
                       [WHERE condition]

                    или

                    UPDATE [user.]table [alias]
                       SET (column [,column]...) = (query)
                         [,(column [,column]...) = (query) ] ...
                       [WHERE condition]


         Ключевые   user             имя владельца таблицы.
         слова и    table            имя существующей таблицы,  к ко-
         параметры                   торой у Вас есть доступ.
                    alias            используется  для переименования
                                     таблицы для ссылок в последующих
                                     фразах оператора.
                    column           столбец,  принадлежащий таблице.
                                     Если он  единственный,   круглые
                                     скобки не обязательны.
                    expr             (См. описание  синтаксиса "expr"
                                     в  Главе  4  - "Операции и функ-
                                     ции" - данного руководства).
                    query            оператор SELECT,  не  содержащий
                                     фраз ORDER  BY  и  FOR   UPDATE,
                                     обычно коррелированный  с подле-
                                     жащей модификации таблицей.
                    condition        правильное условие, имеющее зна-
                                     чение TRUE или FALSE.  (См. опи-
                                     сание  синтаксиса  "condition" в
                                     Главе 4 - "Операции и функции" -
                                     данного руководства).
                                     
                  Справочное руководство по языку SQL        5-140







                                   -- 243 --




         Замечания  Фраза SET определяет столбцы,  подлежащие измене-
         по исполь- нию и заносимые в них значения.
         зованию    Фраза WHERE определяет строки, чьи значения долж-
                    ны  изменяться;  если она отсутствует,  изменению
                    подлежат все строки таблицы.  Для каждой  строки,
                    удовлетворяющей  условию  WHERE  столбцы слева от
                    знака равенства получают значения выражений спра-
                    ва от равенства. Выражения вычисляются только для
                    строк подлежащих модификации.

         Запрос (query)

                    Если фраза SET содержит запрос,  последний должен
                    возвращать в  точности одну строку для каждой из-
                    меняемой строки.  Каждое значение  из  результата
                    запроса назначается   соответственно  столбцу  из
                    заключенных в  круглые  скобки.  Если  запрос  не
                    возвращает строк,     присваемое     (т.е.    SET
                    value=query) значение будет NULL.  Подзапросы мо-
                    гут выбирать строки из таблицы, которая меняется.

                    Во фразе SET можно смешивать значения, возвращае-
                    мые подзапросами и назначаемые выражениями.

                    Оператор UPDATE автоматически выдает исключитель-
                    ные  блокировки для строк или таблиц,  подлежащих
                    изменению. Эти блокировки освобождаются после вы-
                    дачи команд COMMIT или ROLLBACK.

         Коррелированные изменения

                    Если запрос выбирает строки из таблицы подлежащей
                    модификации,  ORACLE будет выполнять  запрос  для
                    каждой  строки  (а  не  один  раз на всю операцию
                    UPDATE). Такой тип модификации называется "корре-
                    лированными изменениями". Ссылка на столбцы изме-
                    няемой таблицы обычно выполняется с помощью алиа-
                    са таблицы.
                    Потенциально каждая строка,  участвующая в опера-
                    торе UPDATE, может быть изменена на другое значе-
                    ние в соответствии с коррелированным подзапросом.
                    Нормально  операторы UPDATE будут менять строку на
                    то же самое значение.

         Примеры    Для установки значения комиссионных null для сот-
                    рудников с профессией TRAINEE (стажер), введите:

                    UPDATE EMP
                       SET COMM = NULL
                       WHERE JOB = 'TRAINEE'

                    Для перевода  служащего  JONES менеджером в отдел
                    20 с повышением жалования  на  1000  долларов  (в
                    предположении, что Вы уверены,  что такая фамилия
                    - единственная), введите:



                                   -- 244 --



                    UPDATE EMP
                       SET JOB = 'MANAGER', SAL=SAL+1000, DEPTNO=20
                       WHERE ENAME = 'JONES'
                    
                      Справочник по SQL - операторам         5-141


                    Приводимый ниже оператор UPDATE показывает:

                     * как две формы могут смешиваться в единственном
                       операторе
                     * использование коррелированного запроса
                     * использование  фразы  WHERE  для   ограничения
                       строк, подлежащих модификации.

                    UPDATE EMP A
                      SET DEPTNO =
                          (SELECT DEPTNO
                             FROM DEPT
                             WHERE LOC = 'BOSTON'),
                          (SAL,COMM) =
                          (SELECT 1.1*AVG(SAL), 1.5*AVG(COMM)
                             FROM EMP B
                             WHERE A.DEPTNO = B.DEPTNO)
                      WHERE DEPTNO IN
                          (SELECT DEPTNO
                             FROM DEPT
                             WHERE LOC = 'DALLAS'
                                OR LOC = 'DETROIT')

                    Предыдущий оператор UPDATE:

                      * изменяет только служащих, работающих в Далла-
                        се или Детройте (фраза WHERE)
                      * устанавливает для них номер отдела  как  и  в
                        Бостоне (подзапрос)
                      * устанавливает жалование и комиссионные равные
                        соответственно 1.1 и 1.5 от среднего значения
                        в их текущем отделе (коррелированный  подзап-
                        рос).

         Связанные  Операторы DELETE и INSERT; фраза WHERE.
         темы
                        
                  Справочное руководство по языку SQL        5-142














                                   -- 245 --




E         ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                   F

E         UPDATE (Встроенный SQL)                       F

         Назначение Изменение данных в указанной таблице.

         Предпосылки Вы должны быть владельцем таблицы или  иметь для
                    нее привилегию UPDATE, или иметь привилегию DBA.

         Синтаксис  EXEC SQL [AT dbname] [FOR :host_integer
                       UPDATE [user.]table
                    SET column [,column]...=({value[,value]...|query})
                       [WHERE {condition|CURRENT OF cursor_name}]

                    или

                    EXEC SQL [AT dbname] [FOR :host_integer
                       UPDATE [user.]table
                          SET column1 ={(value)|query}
                        [,SET column1 ={(value)|query} ]...
                      WHERE {search_condition|CURRENT OF cursor_name}]


         Ключевые   AT dbname        специфицирует имя неумалчиваемой
         слова и                     базы данных.
         параметры  FOR :host_integer ограничивает число одновременно
                                     обрабатываемых элементов массива
                                     за одну операцию UPDATE.
                    table            имя изменяемой таблицы.
                    column           перечисляются имена  одного  или
                                     более столбцов,    для   которых
                                     должны быть обеспечены значения.
                                     Каждый столбец  должен принадле-
                                     жать таблице, указанной во фразе
                                     INTO.
                    value            определяется как литерал,  выра-
                                     жение или :host_variable9:indicator]
                    query            форма оператора SELECT без фразы
                                     INTO.
                    WHERE clause     условие  поиска  для  подлежащих
                                     модификации строк. Если эта фра-
                                     за опущена, изменяются все стро-
                                     ки таблицы или обзора.
                    condition        логическое выражение, содержащее
                                     ссылки  на host - переменные или
                                     массивы.  Условие  поиска  может
                                     содержать в себе запрос. Подроб-
                                     нее см.  в синтаксическом описа-
                                     нии  condition в Главе 4 - "Опе-
                                     рации и функции".
                                     
                      Справочник по SQL - операторам         5-143






                                   -- 246 --




                    CURRENT OF       ссылается  на  последнюю строку,
                                     обработанную по  команде  FETCH,
                                     связанной с  указанным курсором.
                                     Действуют следующие ограничения:
                                     * Если  фраза CURRENT OF описана
                                       совместно с   UPDATE,   курсор
                                       должен объявляться с использо-
                                       ванием SELECT ...  FOR UPDATE.
                                       См. также выше раздел "DECLARE
                                       CURSOR".
                                     * курсор  должен  быть  открыт и
                                       позиционирован на строку.
                                     * если  не выполнялось FETCH или
                                       курсор не  был  открыт,  фраза
                                       CURRENT OF не возвращает строк.

         Замечания  Если host - переменные являются массивами, опера-
         по исполь- тор UPDATE выполняется один раз для каждого набо-
         зованию    ра компонент.  Каждое выполнение оператора UPDATE
                    может изменить ноль, одну или более строк.
                    Если какая-либо из host- переменных, появляющаяся
                    во фразе WHERE - массив,  массивами  должны  быть
                    все host- переменные как во фразе WHERE, так и во
                    фразе SET.  Эти массивы могут быть различной раз-
                    мерности, а  число обрабатываемых зараз строк оп-
                    ределяется минимальной размерностью или значением
                    во фразе FOR (если оно меньше минимальной размер-
                    ности).

                    Если фраза  WHERE  опущена,  выставляется  флажок
                    предупреждения в 5 компоненте SQLCA (sqlwarn).

                    Если ни  одна строка не удовлетворяет условию по-
                    иска (search_condition), в SQLCODE будет записано
                    условие NOT FOUND.

                    Общее число  модифицированных строк также возвра-
                    щается в SQLCA.  Когда в качестве входных host  -
                    переменных используются массивы, счетчик отражает
                    общее количество  изменений  для  всех  компонент
                    массива, обработанных оператором UPDATE.
                    
                  Справочное руководство по языку SQL        5-144















                                   -- 247 --




         Примеры    Следующие примеры   иллюстрируют    использование
                    встроенного SQL - оператора UPDATE:

                    EXEC SQL UPDATE EMP
                       SET SAL = :sal, COMM = :comm
                       WHERE ENAME = :ename;

                    EXEC SQL UPDATE EMP
                       SET (SAL,COMM) =(:sal, :comm)
                       WHERE ENAME = :ename;

                    EXEC SQL UPDATE EMP
                       SET (SAL,COMM) =
                           (SELECT SAL*1.1, COMM*1.1
                              FROM EMP)
                              WHERE ENAME = 'JONES';

                    EXEC SQL UPDATE DEPT
                       SET EMPCNT =
                           (SELECT COUNT(*)
                              FROM EMP
                              WHERE EMP.DEPTNO = DEPT.DEPTNO);

         Связанные  Операторы PREPARE и EXECUTE IMMEDIATE; фраза FOR.
         темы
                    
                      Справочник по SQL - операторам         5-145































                                   -- 248 --




E         ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                   F

E         VALIDATE INDEX                                F


         Назначение Верификация целостности указанного индекса.

         Предпосылки Необходимо быть владельцем индекса,  либо  иметь
                    привилегию DBA.

         Синтаксис  VALIDATE INDEX [user.]index

         Ключевые   user             владелец индекса.
         слова и
         параметры  index            имя проверяемого индекса.


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

         Пример     Для проверки индекса с именем ROSEBUD введите:

                    VALIDATE INDEX ROSEBUD

         Связанные  Оператор CREATE INDEX.
         темы
                    
                  Справочное руководство по языку SQL        5-146

























                                   -- 249 --




E         ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                   F

E         WHENEVER (Встроенный SQL)                     F


         Назначение Специфицирует, каким образом обрабатываются ошиб-
                    ки и предупреждения.  В  общем  случае,  WHENEVER
                    должен быть  первым в программе выполнимым опера-
                    тором. Это гарантирует,  что все возникшие ошибки
                    будут обработаны.

         Предпосылки Нет.

         Синтаксис  EXEC SQL WHENEVER {NOT FOUND|SQLERROR|SQLWARNING}
                       {CONTINUE | GOTO label_name | STOP}


         Ключевые   NOT FOUND        идентифицирует  любую особую си-
         слова и                     туацию, возвращающую  код   +100
         параметры                   (или +1403 в режиме совместимости
                                     в Версией 5).
                    SQLERROR         идентифицируют ситуацию, возвра-
                                     щающую отрицательный код возвра-
                                     та.
                    SQLWARNING       идентифицирует   предупреждение,
                                     означающее не фатальную ошибку.
                    CONTINUE         указывает, что  программа должна
                                     выполнять следующий оператор.
                    GOTO label_name  указывает,  что программа должна
                                     перейти на указанную метку label
                                     _name.
                    STOP             не выполняет дополнительных дей-
                                     ствий.


         Замечания  Оператор WHENEVER будет встраиваться в оператор IF
         по исполь- для проверки указанного условия после каждого вы-
         зованию    полнимого оператора EXEC SQL.
                    Область видимости оператора  WHENEVER  базируется
                    исключительно на  его  позиции в программном коде
                    и не касается правил  видимости  соответствующего
                    языка программирования.  Однако метка, специфици-
                    рованная в операторе WHENEVER, должна быть видима
                    в программе.

                    Оператор WHENEVER остается в силе,  пока не будет
                    перекрыт другим оператором WHENEVER.

                    Обработка ошибки в  самом  операторе  WHENEVER  с
                    целью  избежания зацикливания выполняется следую-
                    щим образом: WHENEVER SQLERROR CONTINUE.

                    Необходимо различать  встроенный  SQL  -  оператор
                    WHENEVER и команду WHENEVER зыка SQL*Plus.

                    Оператор WHENEVER в основном используется для спе-
                    цифицирования действий, выполняемых при:

                                   -- 250 --



                       * выборке последней строки в запросе
                       * если INSERT INTO...SELECT...  не вставил ни
                         одной строки

         Примеры    Следующий пример иллюстрирует использование  опе-
                    ратора WHENEVER:

                    EXEC SQL WHENEVER SQLERROR GOTO some_problems;
                    ....
                    some_problems:
                        EXEC SQL WHENEVER SQLERROR CONTINUE;
                        EXEC SQL ROLLBACK RELEASE;

         Связанные  Операторы FETCH и EXECUTE.
         темы

KOAP Open Portal 2000