我有一個表進程,其中包括一個ID (unsigned int, auto_increment)
和Name (varchar, unique)
。MySQL函數:選擇並返回列
選擇以下功能與任一輸入(無論是在表或不)總是導致
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$$
嘗試重命名輸入參數,因爲它是一樣的列名,並避免不同的充類型爲int。使用有符號或無符號。 –
謝謝。重命名輸入參數。使聲明的var int無符號。不用找了。 – iraxef
@iraxef你是否也在查詢中重命名參數? – Parado