Ключи совместимости с SQL-стандартом и другими СУБД
-
/COMPATIBILITY=< опция >[,< опция > [, …]]
-
< опция >::=STANDARD |CASTNOLENCHECK |CASTNOLTRM |GEOPREFIX |PGGEO |RESIGNAL_ALL |ORACLE |BROWSE_BLOB |NOREC_EXCEPTION |OPTIMISTIC |NAMES_UPPERCASE
-
Опция
STANDARD
-
При запуске с опцией STANDARD ядро СУБД ЛИНТЕР начинает жёстко придерживаться стандарта SQL92. Поведение ядра, запущенного без ключа с данной опцией, в некоторых случаях не совпадает со стандартом.
Отличия в работе ядра, запущенного с ключом
/COMPATIBILITY=STANDARD
:-
позиционные DML-операции и работа транзакций.
При запуске с опцией
STANDARD
командыUPDATE CURRENT
иDELETE CURRENT
могут выполняться по собственному каналу, а не по тому каналу, по которому был подан SELECT-запрос. Это важно для согласованной работы транзакций.При запуске без опции
STANDARD
командыUPDATE CURRENT
иDELETE CURRENT
выполняются по тому каналу, по которому был подан соответствующийSELECT
; -
очистка канала после завершения транзакции.
При запуске с опцией
STANDARD
очистка канала по командамCOMT/RBAC
(завершение транзакции) закрывает выборку. Исключение составляет выполнение командыPUTM
(в СУБД ЛИНТЕР можно подавать командуCOMT
внутри потока команд пакетного добавления без завершения транзакции), в этом случае выборка не будет закрыта.При запуске без опции
STANDARD
после командCOMT/ROLB
выборка не будет закрыта, следовательно, можно подавать команды GET* по тому же каналу; -
код завершения в случае обработки 0 записей.
При запуске с опцией
STANDARD
всеми DML-операциями (SELECT, DELETE, UPDATE, INSERT FROM SELECT
) в случае обработки 0 записей возвращается код завершения «Нет данных» (код 2).При запуске без опции
STANDARD
в случае обработки 0 записей операциямиDELETE, UPDATE, INSERT FROM SELECT
возвращается код успешного завершения (код 0), а код завершения «Нет данных» возвращается только операциейSELECT
; -
выполнение операций
'CAST < выражение > AS CHAR'
в том случае, когда< выражение >
имеет типREAL
илиDOUBLE
.При запуске с опцией
STANDARD
результат выполнения описанной операции выводится в экспоненциальной форме с усеченными нулями и без знака '+'.При запуске без опции
STANDARD
результат выполнения описанной операции всегда выводится в форме с десятичной точкой и без экспоненты (так же, как для значенийDECIMAL
); -
выполнение операций
'CAST < выражение > AS CHAR'
, где< выражение >
имеет типDECIMAL
.При запуске с опцией
STANDARD
при преобразовании выражения типаDECIMAL
с указанием точности вCHAR
выводится столько символов после запятой, сколько указано точностью.Без опции
STANDARD
при преобразованииDECIMAL
вCHAR
концевые нули всегда усекаются; -
привилегии для выполнения операций
DELETE/UPDATE
.При запуске с опцией
STANDARD
для выполнения операцииDELETE/UPDATE
над некоторой таблицей с отбором записей поWHERE
необходима не только привилегияDELETE/UPDATE
на эту таблицу, но и привилегияSELECT
на нее.При запуске без опции
STANDARD
для выполнения операции достаточно привилегииDELETE/UPDATE
; -
усечение лишних концевых пробелов в константах.
При запуске с опцией
STANDARD
перед проверкой совместимости типов происходит усечение лишних концевых пробелов в текстовых константах. Концевые пробелы в пределах длины типа не усекаются при операциях над значенями типов CHAR и NCHAR (как это делается в обычном режиме).create or replace table tab2(c1 char(10), c2 char(10)); insert into tab2 values ('123', '456'); set compatibility 'STANDARD' on; select c1 || c2 from tab2; |123 456 | set compatibility 'STANDARD' off; select c1 || c2 from tab2; |123456 |
При запуске без опции
STANDARD
перед проверкой совместимости типов усечение лишних концевых пробелов не происходит, например, не удастся занести в CHAR(5) константу "A " ("буква и 5 пробелов"); -
обязательность условия для
JOIN
.При запуске с опцией
STANDARD
, если не задано условие соединения (ON
илиUSING
) для конструкцииJOIN
без конструкцийNATURAL
иUNION
, выдается ошибка.При запуске без опции
STANDARD
условие соединения воспринимается, как если бы соединяемые поJOIN
таблицы были перечислены воFROM
через запятую; -
ESC-символ по умолчанию.
При запуске с опцией
STANDARD
ESC-символа по умолчанию нет.При запуске без опции
STANDARD
ESC-символом по умолчанию является символ '\'. -
сравнение NULL-значения < значимого выражения условия > в опции CASE с NULL-значением < значимого выражения условия > в опции WHEN.
При запуске c опцией
STANDARD
результат - FALSE.При запуске без опции
STANDARD
результат - TRUE. -
удаление таблицы (синонима), на которую ссылается представление.
Запрещено обычное удаление таблицы, на которую ссылаются представления (VIEW). При этом на консоль ядра СУБД и в файл linter.out выдаётся список объектов, ссылающихся на удаляемый объект и не позволяющих его удалить.
-
доступ личной последовательности.
При запуске с опцией
STANDARD
только создателю последовательности, при запуске без опцииSTANDARD
- всем пользователям. -
тип данных результата функция SUM.
При запуске c опцией
STANDARD
функция SUM с аргументом одного из типов SMALLINT, INT, BIGINT возвращает результат типа BIGINT, при работе в обычном режиме она в этих же случаях возвращает результат типа DECIMAL.
-
-
Опция
CASTNOLENCHECK
-
Задаёт подавление вывода кода завершения 1063 «Попытка усечения непустых символов» при преобразовании числового значения в строковое с явным указанием длины результата в конструкции выполнении
CAST
.По умолчанию данный код завершения выдается.
-
Опция
CASTNOLTRM
-
Запрещает усечение ведущих пробелов при преобразовании чисел с фиксированной точкой в строковое значение в конструкции
CAST
.При задании ключа с данной опцией ведущие пробелы в 32-символьном представлении DECIMAL-значения не усекаются, по умолчанию – усекаются.
-
Опция
GEOPREFIX
-
Задаёт распознавание ключевых слов подсистемы геометрических данных только при наличии префикса LIN_ (например, LIN_ASTEXT вместо ASTEXT). По умолчанию воспринимаются ключевые слова без префикса LIN_, хотя некоторые из них распознаются только в определенном контексте (например, ASTEXT, если дальше следует признак функции (открывающая скобка "(")).
-
Опция
PGGEO
-
В данном режиме координаты могут быть разделены пробелами и запятыми, в стандартном режиме они могут быть разделены только пробелами. При этом для каждой точки допустимо указание до 4-х координат из многомерного пространства, реально используются из которых только первые две.
-
Опция
RESIGNAL_ALL
-
Заставляет некритичные исключения обрабатывать как критичные (т.е. при таком запуске ядра СУБД нет необходимости в каждом вложенном блоке явно выполнять оператор
RESIGNAL
).Если опция
RESIGNAL_ALL
задана, то обработка некритичных исключения сразу передается в текущий < блок обработки исключений >, при его отсутствии – исключение будет передано на верхний уровень по иерархии.Подробнее см. документ «Процедурный язык», подраздел «Формат блока кода».
-
Опция
ORACLE
-
Заставляет обеспечивать идентичность обработки данных СУБД ЛИНТЕР и ORACLE по умолчанию в случаях, когда их обработка различается.
При указании данной опции:
-
разность дат возвращается в виде значения типа NUMERIC (в днях), а не значения типа DATE;
-
выдается информация о том, что в SELECT-запросе делается попытка вызова хранимой процедуры, содержащей вызовы запросов, отличных от SELECT (выполнение которых может выдавать различные результаты при последовательных вызовах с одними и теми же аргументами). На консоль ядра СУБД и в файл
linter.out
будут выдаваться сообщения типаWARNING: user function "имя_процедуры" (#ROWID) possibly contains non-SELECT query calls
-
результатом конкатенации символьных значений с NULL-значением будет исходная символьная строка (а не NULL-значение).
-
Наличие псевдостолбца с именем «LEVEL» в выборке вида SELECT * FROM… зависит от ключа /COMPATIBILITY=ORACLE в команде запуска ядра СУБД:
-
псевдостолбец будет присутствовать, если ключ не задан;
-
псевдостолбец будет отсутствовать, если ключ задан.
-
-
-
Опция
BROWSE_BLOB
-
Блокирует текущую запись, если в ней есть BLOB-значение по умолчанию так, как если бы был задан модификатор for browse, т.е. изменяет поведение при обнаружении конфликта доступа к BLOB-значению. В случае отсутствия ключа будет выдано диагностическое сообщение «Строка при работе с BLOB не заблокирована», а в случае его наличия будет выполнена блокировка записи.
-
Опция
NOREC_EXCEPTION
-
При выполнении оператора FETCH процедурного языка при отсутствии обработанных строк в курсоре будет сгенерировано исключение 2 (NOREC).
-
Опция
OPTIMISTIC
-
Разрешает иcпользование режима OPTMISTIC.
-
Опция
NAMES_UPPERCASE
-
Приводит все идентификаторы, в том числе указанные в двойных кавычках, к верхнему регистру.
Примечание
Поддерживается со сборки 6.0.17.97.