I have a table foo
, which has a NOT NULL
column with a default called message
:
CREATE TABLE foo(
id int PRIMARY KEY,
message varchar(64) NOT NULL DEFAULT 'Hello'
)
There is a stored procedure bar
that inserts into 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;
You can see, I have to conditionally branch in order for my insert to use the default if i_message
is null. That's fine for just one column, but consider if foo
had many more NOT NULL DEFAULT
columns - the syntax would be way to unwieldy.
Is there a syntax I can use to specify that an inserted value should fall back to the default if null? I tried the following but understandably got syntax errors:
INSERT INTO foo (id, message) VALUES (i_id, COALESCE(i_message, DEFAULT));
INSERT INTO foo (id, message) VALUES (i_id, IFNULL(i_message, DEFAULT));
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…