Fügen Sie default in die Spalte not null ein, wenn value null ist
Ich habe einen tischfoo
, die eine hatNOT NULL
Spalte mit einem Standardaufrufmessage
:
CREATE TABLE foo(
id int PRIMARY KEY,
message varchar(64) NOT NULL DEFAULT 'Hello'
)
Es gibt eine gespeicherte Prozedurbar
das fügt infoo
:
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;
Sie sehen, ich muss bedingt verzweigen, damit meine Einfügung die Standardeinstellung verwendet, wenni_message
ist Null. Das ist in Ordnung für nur eine Spalte, aber überlegen Sie, obfoo
hatte viele mehrNOT NULL DEFAULT
Spalten - die Syntax wäre viel zu unhandlich.
Gibt es eine Syntax, mit der ich festlegen kann, dass ein eingefügter Wert auf den Standardwert zurückgesetzt werden soll, wenn er null ist? Ich habe Folgendes versucht, habe aber verständlicherweise Syntaxfehler bekommen:
INSERT INTO foo (id, message) VALUES (i_id, COALESCE(i_message, DEFAULT));
INSERT INTO foo (id, message) VALUES (i_id, IFNULL(i_message, DEFAULT));