0
我想将我的应用程序代码中的以下两个sql语句合并到postgresql中的某个函数中,但我遇到了一些麻烦。 这里有两个SQL查询我想结合:如何将两个sql语句合并为一个函数
UPDATE userrange f
SET UsedYesNo = true, user_id=user_id, updateddatetime=now()
WHERE f.uservalue IN(
SELECT a.uservalue FROM userrange a WHERE UsedYesNo=false Order By id ASC Limit 1)
RETURNING a.uservalue;
从上面的语句结果在此查询中使用:
INSERT INTO widget
VALUES(DEFAULT, uservalue, 'test','123456778',1,"testservername", now(), Null)
到目前为止,我已经建立了功能,只是做的第一update语句,就像这样:
CREATE or REPlACE FUNCTION create_widget(IN user_id integer, IN password character varying DEFAULT NULL::character varying)
RETURNS TABLE(uservalue integer) AS
$BODY$
BEGIN
RETURN QUERY
UPDATE userrange f SET UsedYesNo = true, user_id=user_id, updateddatetime=now()
WHERE f.uservalue IN(
SELECT a.uservalue FROM userrange a WHERE UsedYesNo=false Order By id ASC Limit 1)
RETURNING a.uservalue;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
它编译,但是当我执行它,它失败,出现错误:
ERROR: missing FROM-clause entry for table "a" LINE 4: RETURNING a.uservalue
我只是用googling这个错误来看看我怎么修复它......但我可以在DECLARE部分中创建一个名为uservalue的变量 并在辅助查询中使用它吗?或者我可以将sql组合成一个
谢谢。
的关键词'DEFAULT'可以在'VALUES'表达式中使用,但不能在一个'SELECT'语句。 –
谢谢,我错过了。我已更新我的回复以反映这一变化。 – bma