Соответствие стандарту SQL
- Поддерживаемые возможности
- Неподдерживаемые возможности
- Ограничения XML и соответствие SQL/XML
В этом разделе в общих чертах описывается, в какой степени QHB соответствует текущему стандарту SQL. Следующая информация не является полноценной декларацией соответствия, но при этом представляет основные темы достаточно подробно, чтобы быть полезной и целесообразной для пользователей.
Официально стандарт SQL называется ISO/IEC 9075 «Database Language SQL» (Язык баз данных SQL). Время от времени выпускается обновленная версия стандарта; последнее обновление было сделано в 2016 году. Эта версия стандарта получила название ISO/IEC 9075:2016, или просто SQL:2016. Ранее были выпущены версии SQL:2011, SQL:2008, SQL:2006, SQL:2003, SQL:1999 и SQL-92. Каждая версия заменяет предыдущую, поэтому заявления о соответствии более ранним версиям не имеют официальной ценности. Разработка QHB нацелена на соответствие последней официальной версии стандарта, если оно не противоречит традиционному функционалу или здравому смыслу. Поддерживается большая часть функционала, требуемого стандартом SQL, хотя иногда с немного отличающимся синтаксисом или функциями. Можно ожидать, что со временем степень соответствия стандарту будет постепенно возрастать.
SQL-92 определил три уровня функционального соответствия стандарту: начальный (Entry), промежуточный (Intermediate) и полный (Full). Большинство СУБД, заявлявших о соответствии стандарту SQL, соответствовали ему только на начальном уровне, поскольку общий набор функций на промежуточном и полном уровнях либо был слишком обширным, либо конфликтовал с устаревшими моделями поведения.
Начиная с SQL:1999, вместо трех малоприменимых пространных уровней, вычлененных в SQL-92, в стандарте SQL определено множество отдельных функциональных возможностей. Большое его подмножество представляет собой «Основной» функционал, который должны обеспечивать все реализации, совместимые с SQL. Поддержка остальных возможностей не являются обязательной. Некоторые дополнительные возможности сгруппированы вместе, формируя «пакеты», о поддержке которых могут заявлять реализации SQL, тем самым декларируя соответствие определенным группам возможностей.
Версии стандарта, начиная с SQL:2003, также разбиты на несколько частей. Каждая часть имеет краткое название. Обратите внимание, что нумерация этих частей непоследовательная.
-
ISO/IEC 9075-1 Структура (SQL/Framework)
-
ISO/IEC 9075-2 Основа (SQL/Foundation)
-
ISO/IEC 9075-3 Интерфейс уровня вызовов (SQL/CLI)
-
ISO/IEC 9075-4 Модули постоянного хранения (SQL/PSM)
-
ISO/IEC 9075-9 Управление внешними данными (SQL/MED)
-
ISO/IEC 9075-10 Привязки объектных языков (SQL/OLB)
-
ISO/IEC 9075-11 Схемы информации и определений (SQL/Schemata)
-
ISO/IEC 9075-13 Программы и типы, использующие язык Java (SQL/JRT)
-
ISO/IEC 9075-14 Спецификации, связанные с XML (SQL/XML)
Ядро QHB реализует части 1, 2, 9, 11 и 14. Часть 3 реализуется драйвером ODBC, а часть 13 — плагином PL/Java, но точное соответствие этих компонентов стандарту на данный момент не проверено. Части 4 и 10 в QHB в настоящее время не реализованы.
QHB поддерживает почти весь основной функционал SQL:2016. Из 179 обязательных возможностей, необходимых для полного соответствия «Основному» функционалу, QHB обеспечивает соответствие как минимум для 160. Кроме того, он поддерживает длинный список дополнительных возможностей. Следует отметить, что на момент написания этой документации ни одна из существующих версий СУБД не претендовала на полное соответствие «Основному» функционалу SQL:2016.
В следующих двух разделах мы предоставляем список функциональных возможностей, которые поддерживает QHB, а также список возможностей, определенных в SQL:2016, которые в QHB еще не поддерживаются. Оба списка носят приблизительный характер: возможность, указанная как поддерживаемая, может отличаться от стандарта в незначительных деталях, а неподдерживаемая возможность на самом деле может быть по большей части реализована. Наиболее точная информация о том, что работает, а что нет, содержится в основной документации.
Примечание
Коды возможностей, содержащие дефис, обозначают подчиненные возможности. Поэтому если какая-то подчиненная возможность не поддерживается, основная возможность также указывается как неподдерживаемая, даже если поддерживаются некоторые другие подчиненные возможности.
Поддерживаемые возможности
Идентификатор | Пакет | Описание | Комментарий |
---|---|---|---|
B012 | Встроенный C | ||
B021 | Непосредственный SQL | ||
E011 | Основа | Числовые типы данных | |
E011-01 | Основа | Типы данных INTEGER и SMALLINT | |
E011-02 | Основа | Типы данных REAL, DOUBLE PRECISION и FLOAT | |
E011-03 | Основа | Типы данных DECIMAL и NUMERIC | |
E011-04 | Основа | Арифметические операторы | |
E011-05 | Основа | Числовое сравнение | |
E011-06 | Основа | Неявное приведение среди числовых типов данных | |
E021 | Основа | Символьные типы данных | |
E021-01 | Основа | Тип данных CHARACTER | |
E021-02 | Основа | Тип данных CHARACTER VARYING | |
E021-03 | Основа | Символьные литералы | |
E021-04 | Основа | Функция CHARACTER_LENGTH | убирает конечные пробелы из значений CHARACTER перед подсчетом |
E021-05 | Основа | Функция OCTET_LENGTH | |
E021-06 | Основа | Функция SUBSTRING | |
E021-07 | Основа | Конкатенация символов | |
E021-08 | Основа | Функции UPPER и LOWER | |
E021-09 | Основа | Функция TRIM | |
E021-10 | Основа | Неявное приведение среди типов символьных строк | |
E021-11 | Основа | Функция POSITION | |
E021-12 | Основа | Сравнение символов | |
E031 | Основа | Идентификаторы | |
E031-01 | Основа | Идентификаторы с разделителями | |
E031-02 | Основа | Идентификаторы в нижнем регистре | |
E031-03 | Основа | Завершающее подчеркивание | |
E051 | Основа | Базовая спецификация запросов | |
E051-01 | Основа | SELECT DISTINCT | |
E051-02 | Основа | Предложение GROUP BY | |
E051-04 | Основа | GROUP BY может содержать столбцы не из <списка выборки> | |
E051-05 | Основа | Элементы списка выборки можно переименовывать | |
E051-06 | Основа | Предложение HAVING | |
E051-07 | Основа | Уточняющий символ * в списке выборки | |
E051-08 | Основа | Корреляционные имена в предложении FROM | |
E051-09 | Основа | Переименование столбцов в предложении FROM | |
E061 | Основа | Базовые предикаты и условия поиска | |
E061-01 | Основа | Предикат сравнения | |
E061-02 | Основа | Предикат BETWEEN | |
E061-03 | Основа | Предикат IN со списком значений | |
E061-04 | Основа | Предикат LIKE | |
E061-05 | Основа | Предложение ESCAPE в предикате LIKE | |
E061-06 | Основа | Предикат NULL | |
E061-07 | Основа | Предикаты количественного сравнения | |
E061-08 | Основа | Предикат EXISTS | |
E061-09 | Основа | Подзапросы в предикате сравнения | |
E061-11 | Основа | Подзапросы в предикате IN | |
E061-12 | Основа | Подзапросы в предикате количественного сравнения | |
E061-13 | Основа | Коррелирующие подзапросы | |
E061-14 | Основа | Условие поиска | |
E071 | Основа | Базовые выражения запросов | |
E071-01 | Основа | Табличный оператор UNION DISTINCT | |
E071-02 | Основа | Табличный оператор UNION ALL | |
E071-03 | Основа | Табличный оператор EXCEPT DISTINCT | |
E071-05 | Основа | Столбцам, объединенным с помощью табличных операторов, необязательно иметь одинаковый тип данных. | |
E071-06 | Основа | Табличные операторы в подзапросах | |
E081 | Основа | Основные права доступа | |
E081-01 | Основа | Право на SELECT | |
E081-02 | Основа | Право на DELETE | |
E081-03 | Основа | Право на INSERT на уровне таблицы | |
E081-04 | Основа | Право на UPDATE на уровне таблицы | |
E081-05 | Основа | Право на UPDATE на уровне столбца | |
E081-06 | Основа | Право REFERENCES на уровне таблицы | |
E081-07 | Основа | Право REFERENCES на уровне столбца | |
E081-08 | Основа | Предложение WITH GRANT OPTION | |
E081-09 | Основа | Право USAGE | |
E081-10 | Основа | Право на EXECUTE | |
E091 | Основа | Функции множеств | |
E091-01 | Основа | AVG | |
E091-02 | Основа | COUNT | |
E091-03 | Основа | MAX | |
E091-04 | Основа | MIN | |
E091-05 | Основа | SUM | |
E091-06 | Основа | Квантификатор ALL | |
E091-07 | Основа | Квантификатор DISTINCT | |
E101 | Основа | Базовые манипуляции с данными | |
E101-01 | Основа | Оператор INSERT | |
E101-03 | Основа | Оператор UPDATE с критерием отбора | |
E101-04 | Основа | Оператор DELETE с критерием отбора | |
E111 | Основа | Оператор SELECT , возвращающий одну строку | |
E121 | Основа | Базовая поддержка курсоров | |
E121-01 | Основа | DECLARE CURSOR | |
E121-02 | Основа | Столбцы ORDER BY, которым необязательно быть в списке выборки | |
E121-03 | Основа | Выражения значений в предложении ORDER BY | |
E121-04 | Основа | Оператор OPEN | |
E121-06 | Основа | Оператор UPDATE с позиционированием | |
E121-07 | Основа | Оператор DELETE с позиционированием | |
E121-08 | Основа | Оператор CLOSE | |
E121-10 | Основа | Оператор FETCH с неявным NEXT | |
E121-17 | Основа | Курсоры WITH HOLD | |
E131 | Основа | Поддержка значения NULL (NULL вместо значений) | |
E141 | Основа | Основные ограничения целостности | |
E141-01 | Основа | Ограничения NOT NULL | |
E141-02 | Основа | Ограничения UNIQUE столбцов NOT NULL | |
E141-03 | Основа | Ограничения PRIMARY KEY | |
E141-04 | Основа | Основное ограничение FOREIGN KEY со значением по умолчанию NO ACTION (без действия) как для операции удаления со ссылками, так и для операций изменения со ссылками | |
E141-06 | Основа | Ограничения CHECK | |
E141-07 | Основа | Значения столбцов по умолчанию | |
E141-08 | Основа | NOT NULL распространяется на PRIMARY KEY | |
E141-10 | Основа | Имена во внешнем ключе можно указывать в любом порядке | |
E151 | Основа | Поддержка транзакций | |
E151-01 | Основа | Оператор COMMIT | |
E151-02 | Основа | Оператор ROLLBACK | |
E152 | Основа | Базовый оператор SET TRANSACTION | |
E152-01 | Основа | Оператор SET TRANSACTION : предложение ISOLATION LEVEL SERIALIZABLE | |
E152-02 | Основа | Оператор SET TRANSACTION : предложения READ ONLY и READ WRITE | |
E153 | Основа | Обновляемые запросы с подзапросами | |
E161 | Основа | Комментарии SQL, начинающиеся с двух минусов | |
E171 | Основа | Поддержка SQLSTATE | |
F021 | Основа | Базовая информационная схема | |
F021-01 | Основа | Представление COLUMNS | |
F021-02 | Основа | Представление TABLES | |
F021-03 | Основа | Представление VIEWS | |
F021-04 | Основа | Представление TABLE_CONSTRAINTS | |
F021-05 | Основа | Представление REFERENTIAL_CONSTRAINTS | |
F021-06 | Основа | Представление CHECK_CONSTRAINTS | |
F031 | Основа | Базовые манипуляции со схемой | |
F031-01 | Основа | Оператор CREATE TABLE для создания хранимых базовых таблиц | |
F031-02 | Основа | Оператор CREATE VIEW | |
F031-03 | Основа | Оператор GRANT | |
F031-04 | Основа | Оператор ALTER TABLE : предложение ADD COLUMN | |
F031-13 | Основа | Оператор DROP TABLE : предложение RESTRICT | |
F031-16 | Основа | Оператор DROP VIEW : предложение RESTRICT | |
F031-19 | Основа | Оператор REVOKE : предложение RESTRICT | |
F032 | Каскадное удаление (CASCADE) | ||
F033 | Оператор ALTER TABLE : предложение DROP COLUMN | ||
F034 | Расширенный оператор REVOKE | ||
F034-01 | Оператор REVOKE , выполняемый не только владельцем объекта схемы | ||
F034-02 | Оператор REVOKE : предложение GRANT OPTION FOR | ||
F034-03 | Оператор REVOKE для отзыва права, данного субъекту с указанием WITH GRANT OPTION | ||
F041 | Основа | Базовое соединение таблиц | |
F041-01 | Основа | Внутреннее соединение (но не обязательно с ключевым словом INNER) | |
F041-02 | Основа | Ключевое слово INNER | |
F041-03 | Основа | LEFT OUTER JOIN | |
F041-04 | Основа | RIGHT OUTER JOIN | |
F041-05 | Основа | Внешние соединения могут быть вложенными | |
F041-07 | Основа | Внутренняя таблица с левой или правой стороны внешнего соединения также может использоваться во внутреннем соединении | |
F041-08 | Основа | Поддерживаются все операторы сравнения (а не только =) | |
F051 | Основа | Базовая поддержка даты и времени | |
F051-01 | Основа | Тип данных DATE (включая поддержку литерала DATE) | |
F051-02 | Основа | Тип данных TIME (включая поддержку литерала TIME) с точностью до доли секунды как минимум с 0 знаков после запятой | |
F051-03 | Основа | Тип данных TIMESTAMP (включая поддержку литерала TIMESTAMP) с точностью до доли секунды как минимум с 0 и 6 знаками после запятой | |
F051-04 | Основа | Предикат сравнения для типов данных DATE, TIME и TIMESTAMP | |
F051-05 | Основа | Явное приведение (CAST) между типами даты/времени и типами символьных строк | |
F051-06 | Основа | CURRENT_DATE | |
F051-07 | Основа | LOCALTIME | |
F051-08 | Основа | LOCALTIMESTAMP | |
F052 | Расширенные средства работы с датами/временем | Арифметика с интервалами и датами/временем | |
F053 | Предикат OVERLAPS | ||
F081 | Основа | UNION и EXCEPT в представлениях | |
F111 | Уровни изоляции, отличные от SERIALIZABLE | ||
F111-01 | Уровень изоляции READ UNCOMMITTED | ||
F111-02 | Уровень изоляции READ COMMITTED | ||
F111-03 | Уровень изоляции REPEATABLE READ | ||
F131 | Основа | Операции группировки | |
F131-01 | Основа | Предложения WHERE, GROUP BY и HAVING, поддерживаемые в запросах со сгруппированными представлениями | |
F131-02 | Основа | Поддержка нескольких таблиц в запросах со сгруппированными представлениями | |
F131-03 | Основа | Поддержка функций множеств в запросах со сгруппированными представлениями | |
F131-04 | Основа | Подзапросы с предложениями GROUP BY и HAVING и сгруппированными представлениями | |
F131-05 | Основа | SELECT , возвращающий одну строку, с предложениями GROUP BY и HAVING и сгруппированными представлениями | |
F171 | Несколько схем для одного пользователя | ||
F191 | Расширенное управление целостностью | Действия по удалению со ссылками | |
F200 | Оператор TRUNCATE TABLE | ||
F201 | Основа | Функция CAST | |
F202 | TRUNCATE TABLE : возможность перезапуска столбца идентификаторов | ||
F221 | Основа | Явные значения по умолчанию | |
F222 | Оператор INSERT : предложение DEFAULT VALUES | ||
F231 | Таблицы прав | ||
F231-01 | Представление TABLE_PRIVILEGES | ||
F231-02 | Представление COLUMN_PRIVILEGES | ||
F231-03 | Представление USAGE_PRIVILEGES | ||
F251 | Поддержка доменов | ||
F261 | Основа | Выражение CASE | |
F261-01 | Основа | Простой оператор CASE | |
F261-02 | Основа | Оператор CASE с критериями отбора | |
F261-03 | Основа | NULLIF | |
F261-04 | Основа | COALESCE | |
F262 | Расширенное выражение CASE | ||
F271 | Составные символьные литералы | ||
F281 | Улучшенный оператор LIKE | ||
F302 | Табличный оператор INTERSECT | ||
F302-01 | Табличный оператор INTERSECT DISTINCT | ||
F302-02 | Табличный оператор INTERSECT ALL | ||
F304 | Табличный оператор EXCEPT ALL | ||
F311-01 | Основа | CREATE SCHEMA | |
F311-02 | Основа | CREATE TABLE для хранимых базовых таблиц | |
F311-03 | Основа | CREATE VIEW | |
F311-04 | Основа | CREATE VIEW : WITH CHECK OPTION | |
F311-05 | Основа | Оператор GRANT | |
F321 | Авторизация пользователей | ||
F361 | Поддержка подпрограмм | ||
F381 | Расширенные манипуляции со схемой | ||
F381-01 | Оператор ALTER TABLE : предложение ALTER COLUMN | ||
F381-02 | Оператор ALTER TABLE : предложение ADD CONSTRAINT | ||
F381-03 | Оператор ALTER TABLE : предложение DROP CONSTRAINT | ||
F382 | Изменение типа данных столбца | ||
F383 | Предложение, устанавливающее NOT NULL для столбца | ||
F384 | Предложение, удаляющее свойство идентификаторов | ||
F386 | Предложение, устанавливающее генерирование значений столбца идентификаторов | ||
F391 | Длинные идентификаторы | ||
F392 | Управляющие символы Unicode в идентификаторах | ||
F393 | Управляющие символы Unicode в литералах | ||
F401 | Расширенное соединение таблиц | ||
F401-01 | NATURAL JOIN | ||
F401-02 | FULL OUTER JOIN | ||
F401-04 | CROSS JOIN | ||
F402 | Соединения по именам столбцов для больших объектов, массивов и мультимножеств | ||
F411 | Расширенные средства работы с датами/временем | Указание часового пояса | отличия в интерпретации литералов |
F421 | Национальные символы | ||
F431 | Прокручиваемые курсоры только для чтения | ||
F431-01 | FETCH с явным NEXT | ||
F431-02 | FETCH FIRST | ||
F431-03 | FETCH LAST | ||
F431-04 | FETCH PRIOR | ||
F431-05 | FETCH ABSOLUTE | ||
F431-06 | FETCH RELATIVE | ||
F441 | Расширенная поддержка функций множеств | ||
F442 | Смешанные ссылки на столбцы в функциях множеств | ||
F471 | Основа | Скалярные значения подзапросов | |
F481 | Основа | Расширенный предикат NULL | |
F491 | Расширенное управление целостностью | Управление ограничениями | |
F501 | Основа | Представления возможностей и соответствия | |
F501-01 | Основа | Представление SQL_FEATURES | |
F501-02 | Основа | Представление SQL_SIZING | |
F501-03 | Основа | Представление SQL_LANGUAGES | |
F502 | Таблицы расширенной документации | ||
F502-01 | Представление SQL_SIZING_PROFILES | ||
F502-02 | Представление SQL_IMPLEMENTATION_INFO | ||
F502-03 | Представление SQL_PACKAGES | ||
F531 | Временные таблицы | ||
F555 | Расширенные средства работы с датами/временем | Дополнительная точность в секундах | |
F561 | Полные выражения значений | ||
F571 | Проверки значений истинности | ||
F591 | Производные таблицы | ||
F611 | Типы данных для индикаторов | ||
F641 | Конструкторы строк и таблиц | ||
F651 | Спецификаторы имен каталогов | ||
F661 | Простые таблицы | ||
F672 | Ретроспективные проверочные ограничения | ||
F690 | Поддержка правил сортировки | но без поддержки наборов символов | |
F692 | Расширенная поддержка правил сортировки | ||
F701 | Расширенное управление целостностью | Действия при обновлении со ссылками | |
F711 | ALTER для домена | ||
F731 | Права на INSERT для столбцов | ||
F751 | Усовершенствования CHECK для представлений | ||
F761 | Управление сеансами | ||
F762 | *CURRENT_CAT | ||
F763 | CURRENT_SCHEMA | ||
F771 | Управление соединением | ||
F781 | Самоссылающиеся операции | ||
F791 | Нечувствительные курсоры | ||
F801 | Полные функции множеств | ||
F850 | <Предложение order by> на верхнем уровне в <выражении запроса> | ||
F851 | <Предложение order by> в подзапросах | ||
F852 | <Предложение order by> на верхнем уровне в представлениях | ||
F855 | Вложенное <предложение order by> в <выражении запроса> | ||
F856 | Вложенное <предложение fetch first> в <предложении запроса> | ||
F857 | <Предложение fetch first> на верхнем уровне в <выражении запроса> | ||
F858 | <Предложение fetch first> в подзапросах | ||
F859 | <Предложение fetch first> на верхнем уровне в представлениях | ||
F860 | <Указание числа строк> в <предложении fetch first> | ||
F861 | <Предложение offset для результата> на верхнем уровне в <выражении запроса> | ||
F862 | <Предложение offset для результата> в подзапросах | ||
F863 | Вложенное <предложение offset для результата> в <выражении запроса> | ||
F864 | <Предложение offset для результата> на верхнем уровне в представлениях | ||
F865 | <Указание числа строк> с <предложением offset для результата> | ||
S071 | Расширенная поддержка объектов | Пути SQL при разрешении имен функций и типов | |
S092 | Массивы пользовательских типов | ||
S095 | Конструкторы массива из запроса | ||
S096 | Необязательное указание границ массива | ||
S098 | ARRAY_AGG | ||
S111 | Расширенная поддержка объектов | ONLY в выражениях запросов | |
S201 | Вызываемые из SQL подпрограммы для массивов | ||
S201-01 | Параметры-массивы | ||
S201-02 | Массивы в качестве типа результата функций | ||
S211 | Расширенная поддержка объектов | Пользовательские функции приведений | |
S301 | Расширенный UNNEST | ||
T031 | Тип данных BOOLEAN | ||
T071 | Тип данных BIGINT | ||
T121 | WITH (без RECURSIVE) в выражении запроса | ||
T122 | WITH (без RECURSIVE) в подзапросе | ||
T131 | Рекурсивный запрос | ||
T132 | Рекурсивный запрос в подзапросе | ||
T141 | Предикат SIMILAR | ||
T151 | Предикат DISTINCT | ||
T152 | Предикат DISTINCT с отрицанием | ||
T171 | Предложение LIKE в определении таблицы | ||
T172 | Предложение подзапроса AS в определении таблицы | ||
T173 | Расширенное предложение LIKE в определении таблицы | ||
T174 | Столбцы идентификаторов | ||
T177 | Поддержка генератора последовательностей: возможность простого перезапуска | ||
T178 | Столбцы идентификаторов: возможность простого перезапуска | ||
T191 | Расширенное управление целостностью | Действие RESTRICT при нарушении ссылок | |
T201 | Расширенное управление целостностью | Сравнимые типы данных для ссылочных ограничений | |
T211-01 | Активная база данных, расширенное управление целостностью | Триггеры, активируемые при UPDATE , INSERT или DELETE в одной базовой таблице | |
T211-02 | Активная база данных, расширенное управление целостностью | Триггеры BEFORE | |
T211-03 | Активная база данных, расширенное управление целостностью | Триггеры AFTER | |
T211-04 | Активная база данных, расширенное управление целостностью | Триггеры FOR EACH ROW | |
T211-05 | Активная база данных, расширенное управление целостностью | Возможность задать условие поиска, которое должно быть истинным перед вызовом триггера | |
T211-07 | Активная база данных, расширенное управление целостностью | Право TRIGGER | |
T212 | Расширенное управление целостностью | Расширенные возможности триггеров | |
T213 | Триггеры INSTEAD OF | ||
T231 | Чувствительные курсоры | ||
T241 | Оператор START TRANSACTION | ||
T261 | Цепочечные транзакции | ||
T271 | Точки сохранения | ||
T281 | Право SELECT на уровне столбцов | ||
T285 | Расширенные имена производных столбцов | ||
T312 | Функция OVERLAY | ||
T321-01 | Основа | Пользовательские функции без перегрузки | |
T321-02 | Основа | Пользовательские хранимые процедуры без перегрузки | |
T321-03 | Основа | Вызов функций | |
T321-04 | Основа | Оператор CALL | |
T321-06 | Основа | Представление ROUTINES | |
T321-07 | Основа | Представление PARAMETERS | |
T323 | Явная настройка безопасности внешних подпрограмм | ||
T325 | Уточненные ссылки на параметры SQL | ||
T331 | Базовые роли | ||
T341 | Перегрузка вызываемых из SQL функций и процедур | ||
T351 | Скобочные комментарии SQL (комментарии /*...*/) | ||
T431 | OLAP | Расширенные возможности группирования | |
T432 | Вложения и конкатенация GROUPING SETS | ||
T433 | Многоаргументная функция GROUPING | ||
T441 | Функции ABS и MOD | ||
T461 | Симметричный предикат BETWEEN | ||
T491 | Производная таблица LATERAL | ||
T501 | Расширенный предикат EXISTS | ||
T521 | Именованные аргументы в операторе CALL | ||
T523 | Значения по умолчанию для параметров INOUT процедур, вызываемых из SQL | ||
T524 | Именованные аргументы при вызовах подпрограмм без применения оператора CALL | ||
T525 | Значения по умолчанию для параметров функций, вызываемых из SQL | ||
T551 | Необязательные ключевые слова для синтаксиса по умолчанию | ||
T581 | Функция подстроки регулярного выражения | ||
T591 | Ограничения UNIQUE для столбцов, принимающих NULL | ||
T611 | OLAP | Элементарные операции OLAP | |
T613 | Выборка | ||
T614 | Функция NTILE | ||
T615 | Функции LEAD и LAG | ||
T617 | Функции FIRST_VALUE и LAST_VALUE | ||
T620 | Предложение WINDOW: параметр GROUPS | ||
T621 | Расширенные числовые функции | ||
T622 | Тригонометрические функции | ||
T623 | Общие логарифмические функции | ||
T624 | Стандартные логарифмические функции | ||
T631 | Основа | Предикат IN с одним элементом списка | |
T651 | Операторы SQL-схемы в подпрограммах SQL | ||
T655 | Циклически зависимые подпрограммы | ||
T831 | Язык путей SQL/JSON: строгий режим | ||
T833 | Язык путей SQL/JSON: множественные индексы | ||
T834 | Язык путей SQL/JSON: метод доступа к членам по символу подстановки (*) | ||
T835 | Язык путей SQL/JSON: выражения фильтров | ||
T836 | Язык путей SQL/JSON: предикат «начинается с» | ||
T837 | Язык путей SQL/JSON: предикат regex_like | ||
X010 | Тип XML | ||
X011 | Массивы типа XML | ||
X014 | Атрибуты типа XML | ||
X016 | Хранимые значения XML | ||
X020 | XMLConcat | ||
X031 | XMLElement | ||
X032 | XMLForest | ||
X034 | XMLAgg | ||
X035 | XMLAgg: параметр ORDER BY | ||
X036 | XMLComment | ||
X037 | XMLPI | ||
X040 | Базовое отображение таблиц | ||
X041 | Базовое отображение таблиц: отсутствуют значения NULL | ||
X042 | Базовое отображение таблиц: NULL в виде nil | ||
X043 | Базовое отображение таблиц: таблица в виде леса элементов | ||
X044 | Базовое отображение таблицы: таблица в виде элемента | ||
X045 | Базовое отображение таблиц: с целевым пространством имен | ||
X046 | Базовое отображение таблиц: отображение данных | ||
X047 | Базовое отображение таблиц: отображение метаданных | ||
X048 | Базовое отображение таблиц: кодирование двоичных строк в base64 | ||
X049 | Базовое отображение таблиц: кодирование двоичных строк в шестнадцатеричном виде | ||
X050 | Расширенное отображение таблиц | ||
X051 | Расширенное отображение таблиц: отсутствуют значения NULL | ||
X052 | Расширенное отображение таблицы: NULL в виде nil | ||
X053 | Расширенное отображение таблиц: таблица в виде леса элементов | ||
X054 | Расширенное отображение таблицы: таблица в виде элемента | ||
X055 | Расширенное отображение таблиц: с целевым пространством имен | ||
X056 | Расширенное отображение таблиц: отображение данных | ||
X057 | Расширенное отображение таблиц: отображение метаданных | ||
X058 | Расширенное отображение таблиц: кодирование двоичных строк в base64 | ||
X059 | Расширенное отображение таблиц: кодирование двоичных строк в шестнадцатеричном виде | ||
X060 | XMLParse: ввод символьных строк и параметр CONTENT | ||
X061 | XMLParse: ввод символьных строк и параметр DOCUMENT | ||
X070 | XMLSerialize: сериализация символьных строк и параметр CONTENT | ||
X071 | XMLSerialize: сериализация символьных строк и параметр DOCUMENT | ||
X072 | XMLSerialize: сериализация символьных строк | ||
X090 | Предикат XML-документа | ||
X120 | Параметры XML в подпрограммах SQL | ||
X121 | Параметры XML во внешних подпрограммах | ||
X221 | Механизм передачи XML BY VALUE | ||
X301 | XMLTable: выбор списка производных столбцов | ||
X302 | XMLTable: выбор столбца нумерации | ||
X303 | XMLTable: выбор столбца по умолчанию | ||
X304 | XMLTable: передача элемента контекста | требуется XML DOCUMENT | |
X400 | Сопоставление имени и идентификаторов | ||
X410 | Изменение типа данных столбца: поддержка типа XML |
Неподдерживаемые возможности
Следующие возможности, определенные в SQL:2016, не реализованы в этом выпуске QHB. В некоторых случаях доступна равнозначная им функциональность.
Идентификатор | Пакет | Описание | Комментарий |
---|---|---|---|
B011 | Встроенный язык Ada | ||
B013 | Встроенный язык COBOL | ||
B014 | Встроенный язык Fortran | ||
B015 | Встроенный язык MUMPS | ||
B016 | Встроенный язык Pascal | ||
B017 | Встроенный язык PL/I | ||
B031 | Базовый динамический SQL | ||
B032 | Расширенный динамический SQL | ||
B032-01 | <Оператор describe input> | ||
B033 | Нетипизированные аргументы функции, вызываемой из SQL | ||
B034 | Динамическое указание атрибутов курсора | ||
B035 | Нерасширенные имена дескрипторов | ||
B041 | Расширения встроенных объявлений исключений SQL | ||
B051 | Расширенные права для выполнения | ||
B111 | Язык модулей — Ada | ||
B112 | Язык модулей — C | ||
B113 | Язык модулей — COBOL | ||
B114 | Язык модулей — Fortran | ||
B115 | Язык модулей — MUMPS | ||
B116 | Язык модулей — Pascal | ||
B117 | Язык модулей — PL/I | ||
B121 | Язык подпрограмм — Ada | ||
B122 | Язык подпрограмм — C | ||
B123 | Язык подпрограмм — COBOL | ||
B124 | Язык подпрограмм — Fortran | ||
B125 | Язык подпрограмм — MUMPS | ||
B126 | Язык подпрограмм — Pascal | ||
B127 | Язык подпрограмм — PL/I | ||
B128 | Язык подпрограмм — SQL | ||
B200 | Полиморфные табличные функции (PTF) | ||
B201 | Более одного обобщенного табличного параметра PTF | ||
B202 | Соразделение PTF | ||
B203 | Более одного указания соразделения | ||
B204 | PRUNE WHEN EMPTY | ||
B205 | Сквозное использование столбцов | ||
B206 | Параметры дескриптора PTF | ||
B207 | Векторное произведение партиционирований | ||
B208 | Интерфейс компонентных процедур PTF | ||
B209 | Расширенные имена PTF | ||
B211 | Язык модулей — Ada: поддержка VARCHAR и NUMERIC | ||
B221 | Язык подпрограмм — Ada: поддержка VARCHAR и NUMERIC | ||
E182 | Основа | Язык модулей | |
F054 | TIMESTAMP в списке приоритетов типа DATE | ||
F121 | Базовое управление диагностикой | ||
F121-01 | Оператор GET DIAGNOSTICS | ||
F121-02 | Оператор SET TRANSACTION : предложение DIAGNOSTICS SIZE | ||
F122 | Расширенное управление диагностикой | ||
F123 | Вся диагностика | ||
F181 | Основа | Поддержка множества модулей | |
F263 | Разделенные запятыми предикаты в простом выражении CASE | ||
F291 | Предикат UNIQUE | ||
F301 | CORRESPONDING в выражениях запросов | ||
F311 | Основа | Оператор определения схемы | |
F312 | Оператор MERGE | возможная альтернатива — INSERT ... ON CONFLICT DO UPDATE | |
F313 | Расширенный оператор MERGE | ||
F314 | Оператор MERGE с ветвью DELETE | ||
F341 | Таблицы использования | без таблиц ROUTINE_*_USAGE | |
F385 | Предложение удаления выражения, генерирующего значения столбца | ||
F394 | Необязательное указание нормальной формы | ||
F403 | Партиционированные соединенные таблицы | ||
F404 | Переменная диапазона для имен общих столбцов | ||
F451 | Определение набора символов | ||
F461 | Именованные наборы символов | ||
F492 | Необязательное указание соблюдения ограничений таблицы | ||
F521 | Расширенное управление целостностью | Утверждения | |
F671 | Расширенное управление целостностью | Подзапросы в CHECK | намеренно опущен |
F673 | Вызовы подпрограммы, читающей SQL-данные, в условиях CHECK | ||
F693 | Порядок сопоставления символов для SQL-сеансов и клиентских модулей | ||
F695 | Поддержка перекодировки | ||
F696 | Дополнительная документация по перекодировке | ||
F721 | Откладываемые ограничения | только сторонние и уникальные ключи | |
F741 | Типы ссылочных совпадений MATCH | пока без частичного совпадения | |
F812 | Основа | Базовое флагирование | |
F813 | Расширенное флагирование | ||
F821 | Ссылки на локальные таблицы | ||
F831 | Полное изменение курсора | ||
F831-01 | Изменяемые прокручиваемые курсоры | ||
F831-02 | Обновляемые упорядоченные курсоры | ||
F841 | Предикат LIKE_REGEX | ||
F842 | Функция OCCURRENCES_REGEX | ||
F843 | Функция POSITION_REGEX | ||
F844 | Функция SUBSTRING_REGEX | ||
F845 | Функция TRANSLATE_REGEX | ||
F846 | Поддержка октетов в операторах регулярных выражений | ||
F847 | Неконстантные регулярные выражения | ||
F866 | Предложение FETCH FIRST: параметр PERCENT | ||
F867 | Предложение FETCH FIRST: опция WITH TIES | ||
R010 | Распознавание шаблона строк: предложение FROM | ||
R020 | Распознавание шаблона строк: предложение WINDOW | ||
R030 | Распознавание шаблона строк: полная поддержка агрегатов | ||
S011 | Основа | Различные типы данных | |
S011-01 | Основа | Представление USER_DEFINED_TYPES | |
S023 | Базовая поддержка объектов | Базовые структурированные типы | |
S024 | Расширенная поддержка объектов | Расширенные структурированные типы | |
S025 | Окончательные структурированные типы | ||
S026 | Самоссылающиеся структурированные типы | ||
S027 | Создание метода по заданному имени метода | ||
S028 | Допускающий перестановку список параметров UDT | ||
S041 | Базовая поддержка объектов | Базовые ссылочные типы | |
S043 | Расширенная поддержка объектов | Расширенные ссылочные типы | |
S051 | Базовая поддержка объектов | Создание таблицы из типа | частично поддерживается |
S081 | Расширенная поддержка объектов | Подтаблицы | |
S091 | Базовая поддержка массивов | частично поддерживается | |
S091-01 | Массивы встроенных типов данных | ||
S091-02 | Массивы отдельных типов | ||
S091-03 | Выражения с массивами | ||
S094 | Массивы ссылочных типов | ||
S097 | Присвоение значения элементу массива | ||
S151 | Базовая поддержка объектов | Предикат типа | |
S161 | Расширенная поддержка объектов | Приведение подтипов | |
S162 | Приведение подтипов для ссылочных типов | ||
S202 | Вызываемые из SQL подпрограммы для мультимножеств | ||
S231 | Расширенная поддержка объектов | Указатели на структурные типы | |
S232 | Указатели на массивы | ||
S233 | Указатели на мультимножества | ||
S241 | Функции преобразований | ||
S242 | Оператор изменения преобразования | ||
S251 | Упорядочивания, определяемые пользователем | ||
S261 | Метод SPECIFICTYPE | ||
S271 | Базовая поддержка мультимножеств | ||
S272 | Мультимножества пользовательских типов | ||
S274 | Мультимножества ссылочных типов | ||
S275 | Расширенная поддержка мультимножеств | ||
S281 | Типы вложенных коллекций | ||
S291 | Ограничение уникальности для всей строки | ||
S401 | Различные типы на основе типов массивов | ||
S402 | Различные типы на основе отдельных типов | ||
S403 | ARRAY_MAX_CARDINALITY | ||
S404 | TRIM_ARRAY | ||
T011 | Метка времени в информационной схеме | ||
T021 | Типы данных BINARY и VARBINARY | ||
T022 | Расширенная поддержка типов данных BINARY и VARBINARY | ||
T023 | Составные двоичные литералы | ||
T024 | Пробелы в двоичных литералах | ||
T041 | Базовая поддержка объектов | Базовая поддержка типов данных LOB | |
T041-01 | Базовая поддержка объектов | Тип данных BLOB | |
T041-02 | Базовая поддержка объектов | Тип данных CLOB | |
T041-03 | Базовая поддержка объектов | Функции POSITION, LENGTH, LOWER, TRIM, UPPER и SUBSTRING для типов данных LOB | |
T041-04 | Базовая поддержка объектов | Конкатенация типов данных LOB | |
T041-05 | Базовая поддержка объектов | Указатель на LOB: неудерживаемый | |
T042 | Расширенная поддержка типов данных LOB | ||
T043 | Множитель T | ||
T044 | Множитель P | ||
T051 | Типы строк | ||
T053 | Явные псевдонимы для ссылки на все поля | ||
T061 | Поддержка UCS | ||
T076 | Тип данных DECFLOAT | ||
T101 | Расширенное определение допустимости значений NULL | ||
T111 | Изменяемые соединения, объединения и столбцы | ||
T175 | Генерируемые столбцы | ||
T176 | Поддержка генератора последовательностей | ||
T180 | Системно версионируемые таблицы | ||
T181 | Таблицы с периодом времени применения | ||
T211 | Активная база данных, расширенное управление целостностью | Базовые возможности триггеров | |
T211-06 | Активная база данных, расширенное управление целостностью | Поддержка правил времени выполнения для взаимодействия триггеров и ограничений | |
T211-08 | Активная база данных, расширенное управление целостностью | Несколько триггеров для одного события выполняются в том порядке, в каком они были созданы в каталоге | намеренно опущено |
T251 | Оператор SET TRANSACTION : параметр LOCAL | ||
T272 | Расширенное управление точками сохранения | ||
T301 | Функциональные зависимости | частично поддерживается | |
T321 | Основа | Базовые подпрограммы, вызываемые из SQL | |
T321-05 | Основа | Оператор RETURN | |
T322 | PSM | Объявляемые атрибуты типа данных | |
T324 | Явная настройка безопасности подпрограмм SQL | ||
T326 | Табличные функции | ||
T332 | Расширенные роли | в основном поддерживается | |
T434 | GROUP BY DISTINCT | ||
T471 | Наборы результатов в качестве возвращаемого значения | ||
T472 | DESCRIBE CURSOR | ||
T495 | Совмещенное изменение и извлечение данных | другой синтаксис | |
T502 | Предикаты периодов | ||
T511 | Счетчики транзакций | ||
T522 | Значения по умолчанию для параметров IN процедур, вызываемых из SQL | поддерживаются, за исключением ключевого слова DEFAULT в вызове | |
T561 | Удерживаемые указатели | ||
T571 | Возвращающие массивы внешние функции, вызываемые из SQL | ||
T572 | Возвращающие мультимножества внешние функции, вызываемые из SQL | ||
T601 | Ссылки на локальные курсоры | ||
T612 | Расширенные операции OLAP | некоторые формы поддерживаются | |
T616 | Варианты обработки NULL для функций LEAD и LAG | ||
T618 | Функция NTH_VALUE | функция существует, но некоторые возможности отсутствуют | |
T619 | Вложенные оконные функции | ||
T625 | LISTAGG | ||
T641 | Присвоение значения нескольким столбцам | поддерживаются только некоторые варианты синтаксиса | |
T652 | Операторы динамического SQL в подпрограммах SQL | ||
T653 | Операторы модификации схемы SQL во внешних подпрограммах | ||
T654 | Операторы динамического SQL во внешних подпрограммах | ||
T811 | Базовые функции-конструкторы SQL/JSON | ||
T812 | SQL/JSON: JSON_OBJECTAGG | ||
T813 | SQL/JSON: JSON_ARRAYAGG с ORDER BY | ||
T814 | Двоеточие в JSON_OBJECT или JSON_OBJECTAGG | ||
T821 | Базовые операторы запросов SQL/JSON | ||
T822 | SQL/JSON: предикат IS JSON WITH UNIQUE KEYS | ||
T823 | SQL/JSON: предложение PASSING | ||
T824 | JSON_TABLE: специфичное предложение PLAN | ||
T825 | SQL/JSON: предложения ON EMPTY и ON ERROR | ||
T826 | Выражение общего значения в предложениях ON ERROR или ON EMPTY | ||
T827 | JSON_TABLE: одноуровневые предложения NESTED COLUMNS | ||
T828 | JSON_QUERY | ||
T829 | JSON_QUERY: варианты обертки массива | ||
T830 | Требование уникальных ключей в функциях-конструкторах SQL/JSON | ||
T832 | Язык пути SQL/JSON: метод элемента | функция datetime() еще не реализована | |
T838 | JSON_TABLE: предложение PLAN DEFAULT | ||
T839 | Форматируемое приведение даты/времени из символьных строк и обратно | ||
M001 | Передача данных | ||
M002 | Передача данных через SQL/CLI | ||
M003 | Передача данных через встроенный SQL | ||
M004 | Поддержка сторонних данных | частично поддерживается | |
M005 | Поддержка сторонних схем | ||
M006 | Подпрограмма GetSQLString | ||
M007 | TransmitRequest | ||
M009 | Подпрограммы GetOpts и GetStatistics | ||
M010 | Поддержка обертки сторонних данных | другой API | |
M011 | Передача данных через Ada | ||
M012 | Передача данных через C | ||
M013 | Передача данных через COBOL | ||
M014 | Передача данных через Fortran | ||
M015 | Передача данных через MUMPS | ||
M016 | Передача данных через Pascal | ||
M017 | Передача данных через PL/I | ||
M018 | Подпрограммы интерфейса обертки сторонних данных на языке Ada | ||
M019 | Подпрограммы интерфейса обертки сторонних данных на языке C | другой API | |
M020 | Подпрограммы интерфейса обертки сторонних данных на языке COBOL | ||
M021 | Подпрограммы интерфейса обертки сторонних данных на языке Fortran | ||
M022 | Подпрограммы интерфейса обертки сторонних данных на языке MUMPS | ||
M023 | Подпрограммы интерфейса обертки сторонних данных на языке Pascal | ||
M024 | Подпрограммы интерфейса обертки сторонних данных на языке PL/I | ||
M030 | Поддержка сторонних данных SQL-сервера | ||
M031 | Общие подпрограммы обертки сторонних данных | ||
X012 | Мультимножества типа XML | ||
X013 | Различные типы на основе типа XML | ||
X015 | Поля типа XML | ||
X025 | XMLCAST | ||
X030 | XMLDocument | ||
X038 | XMLText | ||
X065 | XMLParse: ввод BLOB и вариант CONTENT | ||
X066 | XMLParse: ввод BLOB и вариант DOCUMENT | ||
X068 | XMLSerialize: BOM | ||
X069 | XMLSerialize: INDENT | ||
X073 | XMLSerialize: сериализация BLOB и вариант CONTENT | ||
X074 | XMLSerialize: сериализация BLOB и вариант DOCUMENT | ||
X075 | XMLSerialize: сериализация BLOB | ||
X076 | XMLSerialize: VERSION | ||
X077 | XMLSerialize: явное указание ENCODING | ||
X078 | XMLSerialize: явное объявление XML | ||
X080 | Пространства имен при публикации XML | ||
X081 | Объявления пространств имен XML на уровне запроса | ||
X082 | Объявления пространств имен XML в DML | ||
X083 | Объявления пространств имен XML в DDL | ||
X084 | Объявления пространств имен XML в составных операторах | ||
X085 | Предопределенные префиксы пространств имен | ||
X086 | Объявления пространств имен XML в XMLTable | ||
X091 | Предикат содержимого XML | ||
X096 | XMLExists | Только XPath 1.0 | |
X100 | Поддержка базового языка для XML: вариант CONTENT | ||
X101 | Поддержка базового языка для XML: вариант DOCUMENT | ||
X110 | Поддержка базового языка для XML: сопоставление VARCHAR | ||
X111 | Поддержка базового языка для XML: сопоставление CLOB | ||
X112 | Поддержка базового языка для XML: сопоставление BLOB | ||
X113 | Поддержка базового языка для XML: параметр STRIP WHITESPACE | ||
X114 | Поддержка базового языка для XML: параметр PRESERVE WHITESPACE | ||
X131 | Предложение XMLBINARY на уровне запроса | ||
X132 | Предложение XMLBINARY в DML | ||
X133 | Предложение XMLBINARY в DDL | ||
X134 | Предложение XMLBINARY в составных операторах | ||
X135 | Предложение XMLBINARY в подзапросах | ||
X141 | Предикат IS VALID: управляемый данными | ||
X142 | Предикат IS VALID: предложение ACCORDING TO | ||
X143 | Предикат IS VALID: предложение ELEMENT | ||
X144 | Предикат IS VALID: расположение схемы | ||
X145 | Предикат IS VALID вне проверочных ограничений | ||
X151 | Предикат IS VALID с вариантом DOCUMENT | ||
X152 | Предикат IS VALID с вариантом CONTENT | ||
X153 | Предикат IS VALID с вариантом SEQUENCE | ||
X155 | Предикат IS VALID: NAMESPACE без предложения ELEMENT | ||
X157 | Предикат IS VALID: NO NAMESPACE с предложением ELEMENT | ||
X160 | Базовая информационная схема для зарегистрированных XML-схем | ||
X161 | Расширенная информационная схема для зарегистрированных XML-схем | ||
X170 | Варианты обработки NULL с XML | ||
X171 | Вариант NIL ON NO CONTENT | ||
X181 | Тип XML(DOCUMENT (UNTYPED)) | ||
X182 | Тип XML(DOCUMENT(ANY)) | ||
X190 | Тип XML(SEQUENCE) | ||
X191 | Тип XML(DOCUMENT(XMLSCHEMA)) | ||
X192 | Тип XML(CONTENT(XMLSCHEMA)) | ||
X200 | XMLQuery | ||
X201 | XMLQuery: RETURNING CONTENT | ||
X202 | XMLQuery: RETURNING SEQUENCE | ||
X203 | XMLQuery: передача элемента контекста | ||
X204 | XMLQuery: инициализация переменной XQuery | ||
X205 | XMLQuery: указание EMPTY ON EMPTY | ||
X206 | XMLQuery: указание NULL ON EMPTY | ||
X211 | Поддержка XML 1.1 | ||
X222 | Механизм передачи XML BY REF | анализатор принимает BY REF, но игнорирует его; отбор всегда идет по BY VALUE | |
X231 | Тип XML(CONTENT (UNTYPED)) | ||
X232 | Тип XML(CONTENT (ANY)) | ||
X241 | RETURNING CONTENT при публикации XML | ||
X242 | RETURNING SEQUENCE при публикации XML | ||
X251 | Хранимые значения XML типа XML(DOCUMENT (UNTYPED)) | ||
X252 | Хранимые значения XML типа XML(DOCUMENT (ANY)) | ||
X253 | Хранимые значения XML типа XML(CONTENT (UNTYPED)) | ||
X254 | Хранимые значения XML типа XML(CONTENT (ANY)) | ||
X255 | Хранимые значения XML типа XML(SEQUENCE) | ||
X256 | Хранимые значения XML типа XML(DOCUMENT (XMLSCHEMA)) | ||
X257 | Хранимые значения XML типа XML(CONTENT (XMLSCHEMA)) | ||
X260 | Тип XML: предложение ELEMENT | ||
X261 | Тип XML: NAMESPACE без предложения ELEMENT | ||
X263 | Тип XML: NO NAMESPACE с предложением ELEMENT | ||
X264 | Тип XML: расположение схемы | ||
X271 | XMLValidate: управляемый данными | ||
X272 | XMLValidate: предложение ACCORDING TO | ||
X273 | XMLValidate: предложение ELEMENT | ||
X274 | XMLValidate: расположение схемы | ||
X281 | XMLValidate с вариантом DOCUMENT | ||
X282 | XMLValidate с вариантом CONTENT | ||
X283 | XMLValidate с вариантом SEQUENCE | ||
X284 | XMLValidate: NAMESPACE без предложения ELEMENT | ||
X286 | XMLValidate: NO NAMESPACE с предложением ELEMENT | ||
X300 | XMLTable | Только XPath 1.0 | |
X305 | XMLTable: инициализация переменной XQuery |
Ограничения XML и соответствие SQL/XML
В SQL:2006 в спецификации ISO/IEC 9075-14 (SQL/XML), посвященные XML, были внесены существенные изменения. Реализация типа данных XML и связанных с ним функций в QHB во большей степени соответствует более ранней редакции от 2003 года, с некоторыми заимствованиями из последующих редакций. В частности:
-
Тогда как в текущем стандарте предусмотрено семейство типов данных XML, содержащих «документы» или «содержимое» в нетипизированных вариантах или вариантах с типами XML Schema, а также тип XML(SEQUENCE), содержащий произвольные фрагменты содержимого XML, в QHB есть только один тип xml, который может содержать «документ» или «содержимое». Эквивалента определенному в стандарте типу «последовательность» в QHB не существует.
-
QHB предоставляет две функции, появившиеся в SQL:2006, но вместо языка XML Query, указанного для них в стандарте, в этих вариантах используется язык XPath 1.0.
В этом разделе описаны некоторые проистекающие из этого различия, с которыми вы можете столкнуться.
Запросы ограничены XPath 1.0
Специфичные для QHB функции xpath() и xpath_exists() выполняют запросы к документам XML на языке XPath. QHB также предоставляет стандартные функции XMLEXISTS и XMLTABLE, поддерживающие только XPath, хотя официально они должны поддерживать язык XQuery. Для всех этих функций QHB использует библиотеку libxml2, которая поддерживает только XPath 1.0.
Существует тесная связь между языком XQuery и XPath версии 2.0 и новее: любое выражение, которое синтаксически допустимо и успешно выполняется, выдает в обоих языках одинаковый результат (с небольшим исключением для выражений, содержащих ссылки на числовые символы или предварительно определенные сущности, которые XQuery заменяет соответствующими символами, а XPath оставляет в исходном виде). Но между этими языками и XPath 1.0 такой связи нет; он появился раньше и во многих отношениях отличается от них.
Следует иметь в виду две категории ограничений: ограничение языка XQuery до XPath для функций, указанных в стандарте SQL, и ограничение XPath до версии 1.0 как для стандартных, так и для специфичных функций QHB.
Ограничение языка XQuery относительно XPath
В число возможностей XQuery, отсутствующих у XPath, входят:
-
Выражения XQuery могут не только возвращать все возможные значения XPath, но и конструировать новые узлы XML. XPath может создавать и возвращать значения атомарных типов (числа, строки и т. д.), но возвращать способен только те узлы XML, которые уже присутствовали в документах, поступивших на вход выражения.
-
В XQuery есть управляющие конструкции для итерации, сортировки и группировки.
-
XQuery позволяет объявлять и использовать локальные функции.
В последних версиях XPath начинают появляться возможности, пересекающиеся с возможностями XQuery (например, функциональные конструкции for-each и *sort, анонимные функции и функция parse-xml, создающая узел из строки), но до XPath 3.0 они были недоступны.
Ограничение XPath до версии 1.0
Разработчикам, знакомым с XQuery и XPath 2.0 или новее, приходится сталкиваться с рядом отличий XPath 1.0:
-
Фундаментальный тип выражения XQuery/XPath, тип sequence, который может содержать узлы XML, атомарные значения или и то, и другое, в XPath 1.0 отсутствует. В 1.0 выражение может создавать только множество узлов (содержащих ноль или более узлов XML) или одно атомарное значение.
-
В отличие от последовательности XQuery/XPath, которая может содержать любые требуемые элементы в любом желаемом порядке, во множестве узлов XPath 1.0 нет гарантированного порядка и оно, как и любое множество, не допускает несколько появлений одного и того же элемента.
Примечание
По-видимому, библиотека libxml2 всегда возвращает в QHB множества узлов с внутренними членами в том же относительном порядке, в каком они идут во входном документе. В ее документации это поведение не указано, а выражение XPath 1.0 не может им управлять.
-
Тогда как XQuery/XPath предоставляет все типы, определенные в стандарте XML Schema, а также множество операторов и функций для этих типов, XPath 1.0 поддерживает только множества узлов и три атомарных типа: boolean, double и string.
-
В XPath 1.0 отсутствует условный оператор. Выражение XQuery/XPath вида
if ( hat ) then hat/@size else "no hat"
не имеет эквивалента в XPath 1.0. -
В XPath 1.0 отсутствует оператор сравнения строк с упорядочиванием. Условия
"cat" < "dog"
и"cat" > "dog"
оба являются ложными, поскольку представляют собой числовые сравнения двух значений NaN. Условия же=
и!=
, напротив, сравнивают строки в виде строк. -
XPath 1.0 размывает разницу между сравнениями значений и общими сравнениями, как они определены в XQuery/XPath. Сравнения
sale/@hatsize = 7
иsale/@customer = "alice"
по сути оба являются количественными сравнениями, и их результатом будет истина, если существует элемент sale с заданным значением атрибута, ноsale/@taxable = false()
— это сравнение значений с фактическим логическим значением всего множества узлов. Его результат будет истиной, только если ни у одного элемента sale вообще не будет атрибута taxable. -
В модели данных XQuery/XPath узел документа может иметь либо форму документа (т. е. содержать ровно один элемент верхнего уровня, снаружи которого допускаются только комментарии и инструкции по обработке), либо форму содержимого (с ослабленными ограничениями). В XPath 1.0 ему соответствует корневой узел, который может иметь только форму документа. Это одна из причин, по которой значение типа xml, передаваемое в качестве элемента контекста любой функции QHB на базе XPath, должно быть в форме документа.
Кроме различий, отмеченных здесь, есть и другие. В языках XQuery и XPath 2.0 и новее существует режим совместимости с XPath 1.0, а имеющийся в документации W3C список изменений библиотеки функций и языковых изменений, применяемых в этом режиме, предоставляет более полное (но все же не исчерпывающее) описание различий. Режим совместимости не обеспечивает полную идентичность XPath 1.0 и более поздних языков.
Сопоставления типов данных и значений между SQL и XML
В SQL:2006 и более поздних версиях точно определены преобразования между стандартными типами данных SQL и типами стандарта XML Schema в обе стороны. Однако эти правила выражаются в типах и семантике XQuery/XPath и не могут быть напрямую применены к другой модели данных, характерной для XPath 1.0.
Когда QHB сопоставляет значения данных SQL с XML (как в функции xmlelement) или XML с SQL (как в выходных столбцах xmltable), за исключением нескольких специально обрабатываемых случаев, QHB просто предполагает, что строковая форма XPath 1.0, содержащая данные типа XML, будет допустима в качестве формы ввода в виде текста в типе данных SQL, и наоборот. Это правило подкупает своей простотой, и при этом результаты для многих типов данных именно такие, какими, согласно стандарту, должны быть у преобразований.
В тех случаях, когда требуется взаимодействие с другими системами, для некоторых типов данных может возникнуть необходимость в явном использовании функций форматирования типов данных (например, описанных в разделе Функции форматирования типов данных) для получения сопоставлений, в точности соответствующих стандарту.
Непреднамеренные ограничения реализации
В этом разделе рассматриваются ограничения, которые присущи не самой библиотеке libxml2, а текущей реализации в QHB.
Поддерживается только механизм передачи параметров по значению (BY VALUE)
В стандарте SQL определены два механизма передачи параметров, которые применяются при передаче аргумента XML из SQL в функцию XML или получении результата: BY REF, в котором конкретное значение XML сохраняет идентификатор узла, и BY VALUE, в котором передается содержимое XML, но идентификатор узла теряется. Задать механизм можно перед списком параметров, в качестве механизма по умолчанию для всех параметров, или после каждого параметра, тем самым переопределив выбор по умолчанию.
Чтобы проиллюстрировать разницу, рассмотрим следующие два запроса. Если x является значением XML, в среде SQL:2006 они выдадут значения true и false соответственно:
SELECT XMLQUERY(’$a is $b’ PASSING BY REF x AS a, x AS b NULL ON EMPTY);
SELECT XMLQUERY(’$a is $b’ PASSING BY VALUE x AS a, x AS b NULL ON EMPTY);
QHB примет указания BY VALUE и BY REF в конструкции XMLEXISTS или XMLTABLE, но проигнорирует их. Тип данных xml содержит сериализованное представление символьной строки, поэтому идентификатор узла, который нужно сохранять, отсутствует, и фактически передача всегда производится по значению (BY VALUE).
Невозможно передать в запросы именованные параметры
Функции на основе XPath могут принимать один параметр, служащий элементом контекста для выражения XPath, но не поддерживают передачу дополнительных значений, которые могли бы использоваться в выражении как именованные параметры.
Отсутствие типа XML(SEQUENCE)
Тип данных xml в QHB может содержать значение только в форме документа (DOCUMENT) или содержимого (CONTENT). Элемент контекста выражения XQuery/XPath должен быть одиночным узлом XML или атомарным значением, но XPath 1.0 дополнительно ограничивает его только узлом XML и не имеет типа узла, содержащего CONTENT. В результате единственной формой значения XML, которую в качестве элемента контекста XPath может предоставить QHB, является корректно сформированный документ (DOCUMENT).