Использование значения DEFAULT в условных выражениях и SET - PullRequest
0 голосов
/ 16 февраля 2012

Что-то не так с обработкой ключевых слов DEFAULT

Пример:

 CREATE TABLE BAR(c1 int null,c2 int default 1 not null)

Выполнение SQL следующим образом:

 INSERT INTO BAR SET c1 = 1, c2 = COALESCE(null,DEFAULT)

Результаты: Колонка "DEFAULT" не найдена; Оператор SQL: INSERT INTO BAR SET c1 = 1, c2 = COALESCE (null, DEFAULT) [42122-161] 42S22 / 42122

Одновременно:

INSERT INTO BAR (c1,c2) values (1,  DEFAULT)

Ok!

Но

 INSERT INTO BAR SET c1 = 1, c2  = DEFAULT

Результат: NULL не допускается для столбца "C2"; Оператор SQL: INSERT INTO BAR SET c1 = 1, c2 = ПО УМОЛЧАНИЮ [23502-161] 23502/23502

Я думаю, что это ошибка. Если это не так, есть ли способ указать использование значение по умолчанию существует?

H2 1.3.161 (2011-10-28)

1 Ответ

1 голос
/ 17 февраля 2012

Термин DEFAULT не является псевдостолбцом или выражением, которое можно использовать в формуле.ПО УМОЛЧАНИЮ используется вместо выражения.Я попробовал MySQL, и он работает так же, как H2.

drop table foo cascade;
CREATE TABLE FOO(c1 int null,c2 int default 1 not null);
INSERT INTO FOO SET c1 = 1, c2 = default; -- works
INSERT INTO FOO SET c1 = 1, c2 = default * 2; -- doesn't work

Что вам, вероятно, нужно, это использовать параметризованный оператор (верно?), Где NULL преобразуется в значение по умолчанию.H2 поддерживает это, но это не полностью задокументировано.Вы можете использовать:

drop table foo cascade;
CREATE TABLE FOO(c1 int null,c2 int default 1 not null null_to_default);
INSERT INTO FOO SET c1 = 1, c2 = null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...