2014-04-22 63 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函数使事情变得更容易 –