我有以下存储过程:
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?
答案 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);
通常,这种类型的工作是在插入触发器之前完成的,以保持值对齐。