Insira o padrão na coluna não nula se o valor for nulo
Eu tenho uma mesafoo
, que tem umNOT NULL
coluna com um padrão chamadomessage
:
CREATE TABLE foo(
id int PRIMARY KEY,
message varchar(64) NOT NULL DEFAULT 'Hello'
)
Existe um procedimento armazenadobar
que inserefoo
:
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;
Você pode ver, eu tenho que ramificar condicionalmente para a minha inserção para usar o padrão sei_message
é nulo. Isso é bom para apenas uma coluna, mas considere sefoo
tinha muito maisNOT NULL DEFAULT
colunas - a sintaxe seria maneira difícil de lidar.
Existe uma sintaxe que eu possa usar para especificar que um valor inserido deve cair para o padrão se nulo? Eu tentei o seguinte, mas compreensivelmente tenho erros de sintaxe:
INSERT INTO foo (id, message) VALUES (i_id, COALESCE(i_message, DEFAULT));
INSERT INTO foo (id, message) VALUES (i_id, IFNULL(i_message, DEFAULT));