2014-04-22 88 views
-1

我基本上試圖從下面的函數返回更新的ID。以下是我的代碼的簡化版本:Rerturn從函數返回ID

CREATE FUNCTION confirmUser(_token varchar(255)) RETURNS integer AS $$ 
BEGIN 
    return (UPDATE users SET isConfirmed = true where _token = token RETURNING id)); 
END; 
$$ LANGUAGE plpgsql; 

這是什麼問題?

回答

2

我不認爲你可以像這樣返回值。您需要將其存儲到一個變量中,然後返回該變量:

CREATE FUNCTION confirmUser(_token varchar(255)) RETURNS integer 
AS 
$$ 
declare 
    _id integer; 
BEGIN 
    UPDATE users SET isConfirmed = true where _token = token 
    RETURNING id 
    into _id; 

    return _id; 
END; 
$$ 
LANGUAGE plpgsql; 

但是,您不需要PL/pgSQL函數。一個普通的SQL函數將事情做的很好:

CREATE FUNCTION confirmUser(_token varchar(255)) RETURNS integer 
AS 
$$ 
    UPDATE users SET isConfirmed = true where _token = token 
    RETURNING id 
$$ LANGUAGE sql; 

但你必須確保token是唯一的,否則這將失敗。

+0

是的,我確定令牌是唯一的。問題中給出的代碼被簡化了。 – Sait

+0

@celebisait:另見我的更新,你不需要一個PL/pgSQL函數。使用普通的SQL函數使事情變得更容易 –