Вставьте значение по умолчанию в ненулевой столбец, если значение равно нулю
У меня есть столfoo
, который имеетNOT NULL
столбец с именем по умолчанию:message
CREATE TABLE foo(
id int PRIMARY KEY,
message varchar(64) NOT NULL DEFAULT 'Hello'
)
Есть хранимая процедураbar
который вставляет в:foo
CREATE PROCEDURE bar(
i_id int,
i_message varchar(64)
)
BEGIN
-- other logic
IF i_message IS NOT NULL THEN
INSERT INTO foo (id, message) VALUES (i_id, i_message);
ELSE
INSERT INTO foo (id, message) VALUES (i_id, DEFAULT);
-- could also be: INSERT INTO foo (id) VALUES (i_id);
END IF;
END;
Вы можете видеть, я должен условно перейти, чтобы моя вставка использовала значение по умолчанию, еслиi_message
нулевой. Тот'хорошо только для одного столбца, но еслиfoo
было намного большеNOT NULL DEFAULT
столбцы - синтаксис будет громоздким.
Есть ли синтаксис, который я могу использовать, чтобы указать, что вставленное значение должно возвращаться к значению по умолчанию, если ноль? Я попробовал следующее, но по понятным причинам получил синтаксические ошибки:
INSERT INTO foo (id, message) VALUES (i_id, COALESCE(i_message, DEFAULT));
INSERT INTO foo (id, message) VALUES (i_id, IFNULL(i_message, DEFAULT));