Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
615 views
Welcome To Ask or Share your Answers For Others

1 Answer

  INSERT INTO foo (id, message) 
  VALUES
  (i_id, IFNULL(i_message,DEFAULT(message)));

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...