1. Назначение и область применения
Этот стандарт определяет синтаксис и семантику двух языков баз данных:
- Язык определения схем (SQL-DLL) для объявления структур и ограничений целостности базы данных SQL.
- Язык модулей и манипулирования данными (SQL-DML) для объявления процедур базы данных и выполняемых операторов в конкретной прикладной программе базы данных.
Этот стандарт определяет логические структуры данных и базовые операции для базы данных SQL. Он обеспечивает функциональные возможности для проектирования, доступа, поддержания, управления и защиты базы данных.
Этот стандарт обеспечивает средство для мобильности определений базы данных и прикладных программ между соответствующими стандарту реализациями.
Этот стандарт определяет два уровня и отдельное средство поддержания целостности. Уровень 2 - это полный язык баз данных SQL, не включающий средство поддержания целостности. Уровень 1 - это подмножество уровня 2, определенное в разделе 9 "Уровни" .
Замечание: Планируется дополнительный язык SQL как дополнение к этому стандарту. Основными темами, обсуждаемыми для этого приложения, являются улучшенное управление транзакциями, определение некоторых правил, объявляемых в конкретной реализации, улучшенные средства работы с символами и поддержка национальных наборов символов.
Средство поддержания целостности состоит в определении:
- требуемых ограничений на ссылки между таблицами;
- проверочных ограничений на строки таблицы;
- значений столбца по умолчанию при занесении строки в
таблицу.
В приложениях к стандарту определяется синтаксис включения операторов манипулирования данными SQL в стандартную во всех остальных отношениях прикладную программу. Такой синтаксис определяется как сокращенная нотация для стандартной прикладной программы, в которой встроенные операторы SQL заменены явными "вызовами" процедур базы данных, содержащими операторы SQL.
Этот стандарт применим к реализациям, существующим в среде, которая может включать прикладные языки программирования, языки запросов уровня конечного пользователя, системы генерации отчетов, системы словарей данных и распределенные коммуникационные системы, а также различные средства проектирования баз данных, администрирования баз данных и оптимизации производительности.
2. Ссылки
ISO 1539, Programming Languages - FORTRAN (endorsement by ISO of American National Standard X3.9).
ISO 1989, Programming Languages - COBOL (endorsement by ISO of American National Standard X3.23).
ISO 6160, Programming Languages - PL/1 (endorsement by ISO of American National Standard X3.53).
ISO 7185, Programming Languages - Pascal (endorsement by ISO of British Standard 6192 for the English text).
3. Обзор
3.1 Организация
Этот стандарт организован следующим образом:
- В 3.2, "Нотация" и 3.3, "Соглашения" определяются нотации и соглашения, используемые в этом стандарте.
- В 3.4, "Соответствие" определяется критерий соответствия.
- В Разделе 4, "Понятия" определяются термины и представляются понятия, используемые в определении SQL.
- В Разделе 5, "Общие элементы" определяются элементы языка, встречающиеся в нескольких частях языка SQL.
- В Разделе 6, "Язык определения схем" определяются средства SQL для определения базы данных.
- В Разделе 7, "Язык модулей" определяются модели и процедуры SQL.
- В Разделе 8, "Язык манипулирования данными" определяются операторы манипулирования данными SQL.
- В Разделе 9, "Уровни" определяются два уровня SQL и средство поддержания целостности.
3.2 Нотация
В качестве синтаксической нотации в этом стандарте используются БНФ ("Бэкусовские нормальные формы" или "Формы Бэкуса-Наура) со следующими расширениями:
- Квадратные скобки ([]) обозначают необязательные элементы.
- Многоточия (...) обозначают элементы, которые могут повторяться один или более раз.
- Фигурные скобки ({ }) объединяют последовательности элементов.
В синтаксисе БНФ продукционный символ <A> определяется как содержащий продукционный символ <B>, если <B> входит в расширение <A>. Если <A> содержит <B>, то <B> содержится в <A>. Если <A> содержит <B>, то <A> является "содержащим" продукционным символом для <B>.
3.3 Соглашения
Синтаксические элементы этого стандарта определяются в следующих терминах:
- Функция: короткое предложение о назначении элемента.
- Формат: БНФ-определение синтаксиса элемента.
- Синтаксические правила: дополнительные синтаксические ограничения, которым должен удовлетворять элемент, не выраженные в БНФ.
- Общие правила: последовательная спецификация эффекта выполнения элемента.
В Синтаксических правилах термин "должен" определяет условия, которым должен удовлетворять любой вариант языка SQL, синтаксически соответствующий стандарту. Язык SQL синтаксически соответствует стандарту, если соответствует и Форматам и Синтаксическим правилам.
В Общих правилах термин "должен" определяет условия, которые проверяются во время выполнения операторов SQL. Если все эти условия истинны, то оператор выполняется успешно и в параметр SQLCODE устанавливается определенное неотрицательное число. Если какое-либо из условий ложно, оператор не выполняется успешно, не влияет на состояние базы данных, и в параметр SQLCODE устанавливается определенное реализатором отрицательное число.
В соответствующей стандарту реализации не требуется выполнение точной последовательности действий, определенных в Общих правилах, но должен достигаться тот же эффект, что и при выполнении этой последовательности. Термин "фактически" используется в Общих правилах для того, чтобы выделить действия, результат которых может быть достигнут в реализации другим способом.
Термин "долговременно хранимый объект" используется для характеризования таких объектов, как <модуль> (<module>) и <схема> (<schema>), которые создаются и уничтожаются с помощью механизмов, определенных реализатором.
В этом стандарте разделы начинаются с новых страниц с нечетными номерами, и, начиная с "Общих элементов" Раздела 5 до "Языка манипулирования данными" Раздела 8 , подразделы начинаются с новой страницы. Возникающие в результате пустоты несущественны.
3.4 Соответствие
В этом стандарте определяются соответствующие язык SQL и реализации SQL. Соответствующий стандарту язык SQL должен придерживаться Формата БНФ и соответствующих Синтаксических правил. Соответствующая реализация SQL должна обрабатывать соответствующий стандарту язык SQL в соответствии с Общими правилами.
В реализации, провозглашаемой соответствующей SQL-DDL, должен обрабатываться SQL-DDL (<схема> (<schema>)) на уровне 1 или уровне 2.
В реализации, провозглашаемой соответствующей SQL-DML, на уровне 1 или уровне 2 должны обрабатываться:
- Прямые вызовы операторов языка манипулирования данными SQL (<операторы SQL> (<SQL statement>)) и/или
- Язык модулей (<модуль> (<module>)) и/или
- один или более из
a) COBOL со встроенным SQL (<программа на языке COBOL со встроенным SQL> (<embedded SQL COBOL program>));
b) FORTRAN со встроенным SQL (<программа на языке FORTRAN со встроенным SQL> (<embedded SQL FORTRAN program>));
c) Pascal со встроенным SQL (<программа на языке Pascal со встроенным SQL> (<embedded SQL Pascal program>));
d) PL/1 со встроенным SQL (<программа на языке PL/1 со встроенным SQL> (<embedded SQL PL/1 program>)).
В реализации, провозглашаемой полностью соответствующей SQL, должно обеспечиваться на уровне 1 или уровне 2 соответствие SQL-DDL и соответствие SQL-DML.
Соответствующие стандарту реализации могут обеспечивать дополнительные средства или возможности, не специфицируемые этим стандартом. Реализация остается соответствующей стандарту, даже если в ней обеспечиваются пользовательские опции для обработки языка, не соответствующего стандарту SQL или для обработки языка, соответствующего стандарту языка SQL, не соответствующим стандарту образом.
При провозглашении соответствия этому стандарту должно устанавливаться:
- Какой из следующих типов соответствия провозглашается:
a) Полное соответствие SQL на уровне 1;
b) Полное соответствие SQL на уровне 2;
c) Cоответствие SQL-DDL на уровне 1;
d) Cоответствие SQL-DDL на уровне 2;
e) Cоответствие SQL-DML на уровне 1;
f) Cоответствие SQL-DML на уровне 2.
- Какие из следующих возможностей реализованы:
a) Прямая обработка операторов языка манипулирования данными SQL;
b) Язык модулей (<модуль> (<module>));
c) COBOL со встроенным SQ (<программа на языке COBOL со встроенным SQL> (<embedded SQL COBOL program>));
d) FORTRAN со встроенным SQL (<программа на языке FORTRAN со встроенным SQL> (<embedded SQL FORTRAN program>));
e) Pascal со встроенным SQL (<программа на языке Pascal со встроенным SQL> (<embedded SQL Pascal program>));
f) PL/1 со встроенным SQL (<программа на языке PL/1 со встроенным SQL> (<embedded SQL PL/1 program>)).
- Реализовано ли средство поддержания целостности.
Этот стандарт не определяет метод или время связывания прикладных программ и компонентов системы управления базами данных.
4. Понятия
4.1 Множества
Множество есть неупорядоченный набор различных объектов.
Мультимножество есть неупорядоченный набор объектов, которые не обязательно различны.
Последовательность есть упорядоченный набор объектов, которые не обязательно различны.
Мощность набора есть число объектов в этом наборе. Если не оговорено противное, любой набор может быть пустым.
4.2 Типы данных
Тип данных есть множество представимых значений. Логическое представление значения есть <литерал> (<literal>). Физическое представление значения зависит от реализации.
Значение является примитивным в том смысле, что в этом стандарте не производится логическое подразделение значений. Значение может быть неопределенным значением или не неопределенным значением.
Неопределенное значение есть определяемое в реализации зависящее от типа специальное значение, отличное ото всех не неопределенных значений этого типа.
Не неопределенное значение есть либо символьная строка, либо число. Символьная строка и число - это несравнимые значения.
4.2.1 Символьные строки
Символьная строка состоит из последовательности символов из определенного в реализации множества символов. Символьная строка обладает длиной, которая является положительным целым числом, определяющим число символов в последовательности.
Все символьные строки сравнимы. Символьная строка идентична другой символьной строке, если и только если она равна этой символьной строке в соответствии с правилами сравнения, определенными в 5.11, "<Предикат сравнения> (<comparison predicate>)".
4.2.2 Числа
Число - это либо точное численное значение, либо приблизительное численное значение. Все числа являются сравнимыми значениями.
Каждое точное численное значение обладает точностью и масштабом. Точность - это положительное целое число, которое определяет число значащих десятичных цифр. Масштаб - это неотрицательное целое число. Масштаб 0 означает, что число является целым. При масштабе N точное численное значение есть целое значение значащих цифр, умноженное на 10 в степени N.
Приблизительные численные значения состоят из мантиссы и порядка. Мантисса - это численное значение со знаком, порядок - это целое со знаком, определяющее значимость мантиссы. Приблизительное численное значение обладает точностью. Точность это положительное целое число, определяющее число значащих двоичных цифр в мантиссе.
При присвоении точного численного значения элементу данных или параметру, представляющему точное численное значение, сохраняющее лидирующие значащие цифры приближение этого значения представляется в целевом типе данных. Значение преобразуется таким образом, чтобы получить целевые точность и масштаб.
При присвоении точного или приблизительного численного значения элементу данных или параметру, представляющим приблизительное численное значение, сохраняющее лидирующие значащие цифры приближение этого значения представляется в целевом типе данных. Значение преобразуется таким образом, чтобы получить целевую точность.
4.3 Столбцы
Столбец есть мультимножество значений, которое может меняться во времени. Все значения одного столбца являются значениями одного типа и значениями в одной таблице. Значение столбца - минимальный элемент данных, которые могут быть выбраны из таблицы, и минимальный элемент данных, которые могут быть изменены.
Столбец имеет описание и порядковую позицию в таблице. Описание столбца включает его тип данных и указание о том, распространяется ли на столбец ограничение содержать только не неопределенные значения. Описание столбца символьных строк определяет его атрибут длины. Описание столбца приблизительных чисел определяет точность этих чисел. Описание столбца точных чисел определяет точность и масштаб этих чисел.
Именованный столбец есть столбец именованной таблицы или столбец, который наследует описание именованного столбца. Описание именованного столбца включает его имя.
4.4 Таблицы
Таблица есть мультимножество строк. Строка есть непустая последовательность значений. Все строки одной таблицы обладают одинаковой мощностью и содержат значения каждого столбца этой таблицы. I-ое значение каждой строки таблицы является значением i-ого столбца этой таблицы. Строка является минимальным элементом данных, которые можно занести в таблицу и удалить из таблицы.
Степень таблицы есть число столбцов этой таблицы. В любой момент времени степень таблицы та же, что и мощность каждой из ее строк, и мощность таблицы та же, что и мощность каждого из ее столбцов.
Таблица имеет описание. Это описание включает описание каждого из столбцов таблицы.
Базовая таблица есть именованная таблица, определенная через <определение таблицы> (<table definition>). Описание базовой таблицы включает ее имя.
Порожденная таблица - это таблица, порожденная прямо или косвенно из одной или нескольких других таблиц путем вычисления <спецификации запроса> (<query specification>). Значениями порожденной таблицы являются значения определяющих таблиц при ее порождении.
Представляемая таблица есть именованная таблица, определенная через <определение представления> (<view definition>). Описание представляемой таблицы включает ее имя.
Таблица является либо изменяемой (updatable), либо только читаемой. Операции занесения, модификации и удаления допускаются для изменяемых таблиц и не допускаются для только читаемых таблиц.
Сгруппированная таблица есть множество групп, порождаемых в ходе вычисления <раздела group by> (<group by clause>). Группа - это мульти-множество строк, в которых все значения столбца (столбцов) группирования равны. Сгруппированную таблицу можно рассматривать как набор таблиц. Множественные функции могут применяться к индивидуальным кортежам внутри сгруппированной таблицы.
Сгруппированное представление - это представляемая таблица, порожденная из сгруппированной таблицы.
4.5 Ограничения целостности
Ограничения целостности определяют допустимые значения базы данных путем ограничения значений в базовых таблицах.
Ограничения целостности фактически проверяются после выполнения каждого <оператора SQL> (<SQL statement>). Если базовая таблица, ассоциированная с ограничением целостности, не удовлетворяет этому ограничению целостности, то <оператор SQL> (<SQL statement>) не выполняется, и в параметр SQLCODE устанавливается определенное в реализации отрицательное число.
<Определение ограничения уникальности> (<unique constraint definition>) требует, чтобы никакие две строки в таблице не имели одинаковых значений в указанном столбце или столбцах.
Спецификация NOT NULL требует, чтобы никакие значения в столбце не были неопределенными значениями.
<Определение ограничения ссылок> (<referential constraint definition>) требует, чтобы для каждой строки одной указанной таблицы - "ссылающейся таблицы" - значения указанного столбца или столбцов либо включали как минимум одно неопределенное значение, либо были бы такими же, как значения указанного столбца или столбцов в некоторой строке другой указанной таблицы - "ссылаемой таблицы". Ссылающаяся таблица может быть той же самой таблицей, что и ссылаемая таблица.
<Определение проверочного ограничения> (<check constraint definition>) требует, чтобы указанное <условие поиска> (<search condition>) не было ложно ни для какой строки таблицы.
4.6 Схемы
<Схема> (<schema>) есть долговременно хранимый объект, определенный на языке определения схем. Он состоит из <раздела полномочий схемы> (<schema authorization clause>) и всех <определений таблицы> (<table definition>), <определений представления> (<view definition>) и <определений привилегий> (<privilege definition>), известных системе для указанного <идентификатора полномочий> (<authorization identifier>) в среде. Понятие среды определяется в реализации.
Таблицы, представления и привилегии, определенные через <схему> (<schema>), рассматриваются как "принадлежащие" или должные быть "созданными" <идентификатором полномочий> (<authorization identifier>), определенным для этой схемы.
Замечание: В реализации могут обеспечиваться средства (такие, как DROP TABLE, DROP VIEW, ALTER TABLE и REVOKE), которые позволяют создавать, уничтожать и модифицировать определения таблиц, представлений и привилегий для данного <идентификатора полномочий> (<authorization identifier>) в разные моменты времени. Однако в этом стандарте рассматриваются только <схемы> (<schema>), представляющие определения, которые известны системе в данный момент времени.
4.7 База данных
База данных есть набор всех данных, определенных <схемами> (<schema>) в среде. Понятие среды является определяемым реализацией.
4.8 Модули
<Модуль> (<module>) есть долговременно хранимый объект, определенный на языке модулей. <Модуль> (<module>) состоит из необязательного <имя модуля> (<module name>), <раздела языка> (<language clause>), <раздела полномочий модуля> (<module authorization clause>), ноля или более курсоров, определенных через <объявление курсора> (<declare cursor>) и одной или более <процедур> (<procedure>).
Прикладная программа есть сегмент выполняемого кода, содержащий, возможно, несколько подпрограмм. Единственный <модуль> (<module>) ассоциируется с прикладной программой в течение ее выполнения. Прикладная программа должна быть ассоциирована с самое большее одним <модулем> (<module>). Способ установления этой ассоциации, включающий возможное требование выполнения некоторого определенного в реализации оператора, определяется в реализации.
4.9 Процедуры
<Процедура> (<procedure>) состоит из <имени процедуры> (<procedure name>), последовательности <объявлений параметров> (<parameter declaration>) и одного <оператора SQL> (<SQL statement>).
Прикладная программа, ассоциированная с <модулем> (<module>), может обращаться к <процедурам> (<procedure>) этого <модуля> (<module>) через оператор "call", в котором определяется <имя процедуры> (<procedure name>) этой <процедуры> (<procedure>) и задается последовательность значений параметров, число и <тип данных> (<data type>) которых соответствует <объявлениям параметров> (<parameter declaration>) этой <процедуры> (<procedure>). Вызов <процедуры> (<procedure>) приводит к выполнению содержащегося в ней <предложения SQL> (<SQL statement>).
4.10 Параметры
Параметр объявляется в <процедуре> (<procedure>) через <объявление параметра> (<parameter declaration>). <Объявление параметра> (<parameter declaration>) определяет <тип данных> (<data type>) своего значения. Параметр либо принимает, либо поставляет значение соответствующего аргумента в вызове этой <процедуры> (<procedure>).
4.10.1 Параметр SQLCODE
Параметр SQLCODE - это специальный целый параметр. Его значение устанавливается равным коду состояния, который либо означает, что вызов <процедуры> (<procedure>) завершился успешно, либо, что в течение выполнения <процедуры> (<procedure>) возникла исключительная ситуация.
4.10.2 Параметр-индикатор
Параметр-индикатор - это целый параметр, который указывается после другого параметра. Его основное назначение - показывать, может ли значение другого параметра (принимаемого или поставляемого) быть неопределенным значением.
4.11 Стандартные языки программирования
Стандарт определяет действия <процедур> (<procedure>) в <модулях> (<module>), когда эти <процедуры> (<procedure>) вызываются программами, соответствующими определенным стандартным языкам программирования. Термины "стандартная программа на языке COBOL", "стандартная программа на языке FORTRAN", "стандартная программа на языке Pascal" и "стандартная программа на языке PL/1" относятся к программам, отвечающим критериям соответствия стандартов, перечисленных в разделе 2, "Ссылки" .
4.12 Курсоры
Курсор определяется через <объявление курсора> (<declare cursor>). Для каждого <объявления курсора> (<declare cursor>) в <модуле> (<module>) курсор фактически cоздается тогда, когда образуется транзакция (см. 4.16, "Транзакции"), ссылающаяся на этот <модуль> (<module>), и уничтожается, когда эта транзакция завершается.
Курсор находится либо в открытом состоянии, либо в закрытом состоянии. Начальное состояние курсора - закрытое. Курсор переходит в открытое состояние через <оператор открытия> (<open statement>) и возвращается в закрытое состояние через <оператор закрытия> (<close statement>), <оператор фиксации> (<commit statement>) или <оператор отката> (<rollback statement>).
Курсор в открытом состоянии определяет таблицу, порядок строк в этой таблице и позицию относительно этого порядка. Если <объявление курсора> (<declare cursor>) не включает <раздел упорядочивания> (<order by clause>) или включает <раздел упорядочивания> (<order by clause>), не полностью определяющий порядок строк, то строки в таблице имеют порядок, полностью или частично определенный в реализации.
Внутри одной транзакции, если порядок строк не определен или не полностью определен через <раздел упорядочивания> (<order by clause>), относительная позиция двух строк будет в общем случае одна и та же при каждом открытии курсора. Порядок может изменяться от одного раза к другому, если меняются значения базы данных или значения параметров, указанных в <спецификации запроса> (<query specification>) в <объявлении курсора> (<declare cursor>).
В разных транзакциях, даже когда значения базы данных и значения параметров, указанных в <спецификации запроса> (<query specification>), одинаковы, порядок строк, определяемый одинаковыми <спецификациейкурсора>(<cursor specification>) и <оператором открытия> (<open statement>), может быть различным.
Позиция курсора в открытом состоянии может быть перед определенной строкой, на определенной строке или после последней строки. Если курсор установлен на строку, то эта строка является текущей строкой курсора. Курсор может быть установлен перед первой строкой или после последней строки, даже если таблица пуста.
<Оператор чтения> (<fetch statement>) продвигает позицию открытого курсора на следующую строку в порядке этого курсора и выбирает значения столбцов этой строки. <Оператор модификации: позиционный> (<update statement: positioned>) изменяет текущую строку курсора. <Оператор удаления: позиционный> (<delete statement: positioned> удаляет текущую строку курсора.
Если курсор установлен перед некоторой строкой, и новая строка заносится в эту позицию, то оказываемое этим возможное влияние на позицию курсора, если и есть, определяется в реализации.
Если курсор установлен на некоторую строку или перед некоторой строкой, и эта строка удаляется, то курсор устанавливается перед строкой, непосредственно следующей за позицией удаленной строки. Если такая строка не существует, то курсор устанавливается после последней строки.
Если при выполнении <оператора SQL> (<SQL statement>), ссылающегося на открытый курсор, возникает ошибка, то возможное действие этого на позицию или состояние курсора определяется в реализации.
Рабочая таблица - это таблица, возникающая вследствие открытия курсора. Приводит ли открытие курсора к созданию рабочей базовой таблицы или рабочей представляемой таблицы, определяется в реализации.
Каждая строка рабочей представляемой таблицы порождается только тогда, когда курсор позиционируется на эту строку.
Рабочая базовая таблица создается при открытии курсора и уничтожается при закрытии курсора.
4.13 Операторы
<Оператор SQL> (<SQL statement>) определяет операцию над базой данных или операцию над курсором. <Оператор выборки> (<select statement>) читает значения из таблицы. <Оператор занесения> (<insert statement>) заносит строки в таблицу. <Оператор модификации: поисковый> (<update statement: searched>) или <оператор модификации: позиционный> (<update statement: positioned>) изменяет значения строк таблицы. <Оператор удаления: поисковый> (<delete statement: searched>) или <оператор модификации: позиционный> (<delete statement: positioned>) удаляет строки из таблицы.
4.14 Синтаксис встраивания
<Программа со встроенным SQL> (<embedded SQL host program>) (<программа на языке COBOL со встроенным SQL> (<embedded SQL COBOL program>), <программа на языке FORTRAN со встроенным SQL> (<embedded SQL FORTRAN program>), <программа на языке Pascal со встроенным SQL> (<embedded SQL Pascal program>) или <программа на языке PL/1 со встроенным SQL> (<embedded SQL PL/1 program>)) - это прикладная программа, которая содержит текст на языке программирования и текст на языке SQL. Текст на языке программирования должен удовлетворять требованиям конкретного стандарта языка программирования. Текст на языке SQL должен состоять из одного или более <встроенных операторов SQL> (<embedded SQL statement>) и (необязательно) из одной или более <встроеных секций объявлений SQL> (<embedded SQL declare section>). Это позволяет представлять приложения базы данных в гибридной форме, в которой <операторы SQL> (<SQL statement>) прямо встроены в прикладную программу. Такая гибридная прикладная программа по определению должна быть эквивалентна стандартной прикладной программе, в которой <операторы SQL> (<SQL statement>) заменены на вызовы <процедур> (<procedure>) SQL в отдельном <модуле> (<module>) SQL.
4.15 Привилегии
Привилегия разрешаетвыполнить данную категорию <действий> (<action>) над указанной таблицей или представлением на основе указанного <идентификатора полномочий> (<authorization identifier>).Допустимыми<действиями> (<action>) являются INSERT, DELETE, SELECT, UPDATE и REFERENCES.
<Идентификатор полномочий> (<authorization identifier>) определяется для каждой <схемы> (<schema>) и <модуля> (<module>).
<Идентификатор полномочий> (<authorization identifier>), определенный для <схемы> (<schema>), должен отличаться от <идентификатора полномочий> (<authorization identifier>) любой другой <схемы> (<schema>) в той же среде. <Идентификатор полномочий> (<authorization identifier>) для <схемы> (<schema>) является "владельцем" всех таблиц и представлений, определенных в этой <схеме> (<schema>).
Таблицы и представления обозначаются <именами таблиц>
(<table name>). <Имя таблицы> (<table name>) состоит из
<идентификатора полномочий> (<authorization identifier>) и
<идентификатора> (<identifier>). <Идентификатор полномочий>
(<authorization identifier>) идентифицирует <схему>
(<schema>), в которой были определены таблица или представле-
ние, обозначаемые <именем таблицы> (<table name>). Таблицы и
представления, определенные в различных <схемах> (<schema>),
могут иметь одинаковые <идентификаторы> (<identifier>).
Если ссылка на <имя таблицы> (<table name>) не содержит явно <идентификатор полномочий> (<authorization identifier>), то по умолчанию указывается <идентификатор полномочий> (<authorization identifier>) содержащих <схемы> (<schema>) или <модуля> (<module>).
<Идентификатор полномочий> (<authorization identifier>) для <схемы> (<schema>) обладает всеми привилегиями по отношению к таблицам и представлениям, определенным в этой <схеме> (<schema>).
<Схема> (<schema>) с данным <идентификатором полномочий> (<authorization identifier>) может содержать <определения привилегий> (<privilege definition>), которые передают привилегии другим <идентификаторам полномочий> (<authorization identifier>). Переданные привилегии могут относиться к таблицам и представлениям, определенным в текущей <схеме> (<schema>), или могут быть привилегиями, которые были переданы данному <идентификатору полномочий> (<authorization identifier>) другой <схемой> (<schema>). Раздел WITH GRANT OPTION <определения привилегии> (<privilege definition>) определяет, может ли получатель привилегии передавать ее другим.
<Модуль> (<module>) специфицирует <идентификатор полномочий> <authorization identifier>, <идентификатор полномочий модуля> (<module authorization identifier>), который должен обладать привилегиями, достаточными для выполнения каждого <оператора SQL> (<SQL statement>) в <модуле> (<module>).
4.16 Транзакции
Транзакция есть последовательность операций, включающая операции над базой данных, атомарная по отношению к восстановлению и асинхронности. Транзакция начинается, когда вызывается процедура и никакая транзакция в данный момент не активна. Транзакция заканчивается при выполнении <оператора фиксации> (<commit statement>) или <оператора отката> (<rollback statement>). Если транзакция завершается выполнением <оператора фиксации> (<commit statement>), все изменения, внесенные в базу данных этой транзакцией делаются доступными для всех асинхронно выполняемых транзакций. Если транзакция завершается выполнением <оператора отката> (<rollback statement>), все изменения, внесенные в базу данных этой транзакцией, аннулируются. Зафиксированные изменения не могут быть аннулированы. Изменения, внесенные в базу данных транзакцией, могут восприниматься этой транзакцией, но до тех пор, пока транзакция не завершится выполнением <оператора фиксации> (<commit statement>), они не могут восприниматься другими транзакциями.
Гарантируется сериализуемость выполнения асинхронных транзакций. Сериализуемое выполнение определяется как выполнение операций асинхронно выполняемых транзакций, которое производит то же самое действие, что и некоторое последовательное выполнение тех же самых транзакций. Последовательное выполнение - это такое выполнение, при котором каждая транзакция полностью завершается перед началом выполнения следующей транзакции.
Выполнение <оператора SQL> (<SQL statement>) внутри транзакции не оказывает никаких воздействий на базу данных кроме тех, которые установлены Общими правилами для этого <оператора SQL> (<SQL statement>).
Из этого совместно с гарантированным сериализуемым выполнением транзакций следует воспроизводимость всех операций чтения внутри транзакции, если не учитывать следующего:
- Влияния изменений базы данных и ее содержимого, явно производимых самой транзакцией.
- Влияния изменений значений параметров, поставляемых процедурам, которые открывают курсоры, на последующие выборки через эти курсоры.
Содержание | Вперед
|