10

と呼ばれるデフォルトfooの列を持つテーブルがあります:NOT NULLmessage

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_messageis 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));
4

1 に答える 1

26
  INSERT INTO foo (id, message) 
  VALUES
  (i_id, IFNULL(i_message,DEFAULT(message)));
于 2012-12-13T20:10:26.940 に答える