当结果可能为null时,如何在SQL中选择变量?

时间:2014-02-14 16:08:34

标签: mysql sql

我有以下存储过程:

DELIMITER //
CREATE PROCEDURE NewSeqType(IN mySubschemaID INT, IN hashVal bigint(20))
BEGIN
  DECLARE newSeqTypeID INT;
    SELECT MAX(ID)+1 INTO newSeqTypeID FROM sequenceType WHERE subschemaID=mySubschemaID;
    INSERT INTO SequenceType(ID, HashValue, subschemaID) VALUES(newSeqTypeID, hashVal, mySubschemaID);
  SELECT  LAST_INSERT_ID() as ID; -- return prim key
END//

如果表中已存在subschemaID=mySubschemaID的数据,则此方法有效,但如果该SELECT语句返回null,则MAX(ID)+1部分会给出错误column ID cannot be null。< / p>

在这种情况下,如何为ID提供默认值,比如0?

1 个答案:

答案 0 :(得分:1)

为此,您可以使用coalesce()

SELECT coalesce(MAX(ID)+1, 1) INTO newSeqTypeID FROM sequenceType WHERE subschemaID=mySubschemaID;

INSERT INTO SequenceType(ID, HashValue, subschemaID) VALUES(newSeqTypeID, hashVal, mySubschemaID);

通常,这种类型的工作是在插入触发器之前完成的,以保持值对齐。