Ключи совместимости с 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-символ по умолчанию.
При запуске с опцией
STANDARDESC-символа по умолчанию нет.При запуске без опции
STANDARDESC-символом по умолчанию является символ '\'. -
сравнение 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.