我有一个表 Processes,它由一个ID (unsigned int, auto_increment)
和组成Name (varchar, unique)
。
使用任何输入(无论是否在表中)选择以下函数总是会导致
ERROR 1172 (42000): 结果包含多于一行
CREATE FUNCTION LookupOrInsertProcess(nametwo VARCHAR(255))
RETURNS INT UNSIGNED
BEGIN
DECLARE myid INT UNSIGNED;
SELECT ID INTO myid FROM Processes WHERE Name=nametwo;
RETURN myid;
END$$
但是,选择以下函数总是返回 NULL:
CREATE FUNCTION LookupOrInsertProcess(nametwo VARCHAR(255))
RETURNS INT UNSIGNED
BEGIN
DECLARE myid INT UNSIGNED;
SELECT ID INTO myid FROM Processes WHERE Name=nametwo;
RETURN myid;
END$$
此外,请注意以下确实返回了正确的结果(数字 30 和 50 是任意的):
CREATE FUNCTION LookupOrInsertProcess(nametwo VARCHAR(255))
RETURNS INT UNSIGNED
BEGIN
DECLARE myid INT UNSIGNED;
SELECT ID INTO myid FROM Processes WHERE Name=nametwo;
IF myid IS NULL THEN
RETURN 30;
ELSE
RETURN 50;
END IF;
END$$
任何帮助表示赞赏。
更新:编辑以消除表列和函数参数之间的冲突。我不相信这是问题所在。
UPDATE2:请注意,无论输入参数是否在表中,以下内容似乎都有效。为什么在没有 coalesce() 的情况下,即使对于表中的输入参数,该函数也会返回 NULL?
CREATE FUNCTION LookupOrInsertProcess(nametwo VARCHAR(255))
RETURNS INT UNSIGNED
BEGIN
DECLARE myid INT UNSIGNED;
SELECT ID INTO myid FROM Processes WHERE Name=nametwo;
RETURN COALESCE(myid, 0);
END$$