Wstaw domyślną do kolumny nie pustej, jeśli wartość jest null
Mam stolikfoo
, który maNOT NULL
kolumna o nazwie domyślnejmessage
:
CREATE TABLE foo(
id int PRIMARY KEY,
message varchar(64) NOT NULL DEFAULT 'Hello'
)
Istnieje procedura składowanabar
to wstawiafoo
:
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;
Widzisz, muszę warunkowo rozgałęzić, aby moja wstawka użyła domyślnej, jeślii_message
ma wartość null. To dobrze w przypadku tylko jednej kolumny, ale rozważ, czyfoo
miał wiele więcejNOT NULL DEFAULT
kolumny - składnia byłaby nieporęczna.
Czy istnieje składnia, której mogę użyć, aby określić, że wstawiona wartość powinna wrócić do wartości domyślnej, jeśli jest pusta? Próbowałem następujących, ale zrozumiałych, błędów składniowych:
INSERT INTO foo (id, message) VALUES (i_id, COALESCE(i_message, DEFAULT));
INSERT INTO foo (id, message) VALUES (i_id, IFNULL(i_message, DEFAULT));