При запуске SELECT COALESCE(NULL, NULL);
в Apache Calcite я получаю сообщение об ошибке,
.
Предложение ELSE или хотя бы одно предложение THEN должно быть ненулевым
Это происходит потому, что функция COALESCE
преобразуется в выражение CASE
, и последнее проверяется на то, является ли хотя бы один операнд THEN
или ELSE
не нулевым. Если все NULL
, то выдается ошибка. Это мотивировано причинами, описанными в комментарии , найденном в исходном коде:
в соответствии со стандартом sql мы не можем иметь все операторы THEN и ELSE, возвращающие ноль
Следует отметить, что этот запрос возвращает NULL
, когда какой-либо из параметров явно приведен, например, SELECT COALESCE(CAST(NULL AS VARCHAR), NULL);
.
Однако я нигде не мог найти это. То, что я нашел, это после (см. 'Сокращения, чтобы справиться с нулевым' разделом, подчеркивание мое):
Coalesce возвращает первый ненулевой параметр ( или ноль, если все параметры нулевые ).
Это утверждение, приведенное выше, похоже, соответствует Oracle и PostreSQL docs.
У меня вопрос: должен ли COALESCE
, содержащий буквенные NULL
s, работать только в соответствии со стандартом SQL?