と呼ばれるデフォルト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;
ご覧のとおり、挿入でデフォルトの if i_message
is null を使用するには、条件付きで分岐する必要があります。foo
列が 1 つだけの場合は問題ありませんが、さらに多くの列がある場合を考慮NOT NULL DEFAULT
してください。構文が扱いにくくなります。
null の場合、挿入された値がデフォルトにフォールバックするように指定するために使用できる構文はありますか? 次のことを試しましたが、当然のことながら構文エラーが発生しました。
INSERT INTO foo (id, message) VALUES (i_id, COALESCE(i_message, DEFAULT));
INSERT INTO foo (id, message) VALUES (i_id, IFNULL(i_message, DEFAULT));