Введение в стандарты языка баз данных SQL


Несовместимости SQL/ и SQL/


Документ SQL/92 включает приложение, в котором устанавливаются несовместимости между SQL/92 и SQL/89. Мы перечислим эти несовместимости ниже.

  1. В SQL/92 имеется более 100 дополнительных зарезервированных слов. Конкретные детали следует смотреть в самом стандарте.
  2. В SQL/89 модуль, происходящий из встроенного SQL, имел идентификатор авторизации, определяемый в реализации; в SQL/92 он вообще не имеет идентификатора авторизации.
  3. Имена параметров в SQL/89 не имели префикса в виде двоеточия. SQL/92 требует наличия такого префикса.
  4. SQL/89 допускает определение двух различных возможных ключей для одной базовой таблицы с заданием одного и того же набора столбцов. SQL/92 этого не допускает.
  5. SQL/89 не препятствует рекурсивному определению представления, т.е. в терминах его же самого. SQL/92 не допускает этой возможности.
  6. Семантика WITHCHECKOPTION была двусмысленной в SQL/89, но была прояснена в SQL/92. (По крайней мере, это утверждается в документе SQL/92. Более точно, опция проверки не являлась наследуемой в SQL/89, но является таковой в SQL/92 по умолчанию.)
  7. Пусть в спецификации курсора C отсутствует раздел GROUPBY, и пусть курсор C открывается несколько раз внутри одной и той же транзакции. В SQL/89 требуется, чтобы строки, доступные через курсор C, возвращались в одном и том же порядке при каждом открытии. В SQL/92 порядок при каждом открытии зависит от реализации и, следовательно, может отличаться для разных открытий курсора.
  8. В соответствии со стандартом SQL/89, если курсор установлен на некоторую строку или перед ней, и эта строка удаляется, курсор устанавливается перед следующей строкой или (если следующей строки нет) после последней строки. (Заметим, что это требование достаточно трудно удовлетворить в реализации.) В SQL/92 изменение состояния курсора определяется только если операция DELETE производится через тот же самый курсор; в противном случае воздействие на курсор зависит от реализации.
  9. В SQL/89 привилегия SELECT требовалась только для таблиц, к которым производится доступ через операторы FETCH или одиночный SELECT. В SQL/92 это дополнительно требуется для таблиц, упоминаемых в некоторых табличных выражениях, условных выражениях и скалярных выражениях.




- Начало -  - Назад -  - Вперед -