【发布时间】:2016-03-20 00:30:04
【问题描述】:
在 MSSQL 中,当在多语句表值函数中时,您可以与表进行交互,如下所示。
CREATE FUNCTION dbo.test_func() RETURNS @table TABLE(id INT) AS
BEGIN
INSERT INTO @table(id)
SELECT 1 UNION SELECT 2 UNION SELECT 3
UPDATE @table SET id = -1 WHERE id = 3
RETURN
END
GO
有没有办法在 Postgres 9.5 中实现这一点?我不确定要更新什么,如下所示。
CREATE FUNCTION test_func() RETURNS TABLE(id int) AS $$
BEGIN
return QUERY SELECT 1 UNION SELECT 2 UNION SELECT 3;
UPDATE ???? SET id = -1 WHERE id = 3;
END;
$$ LANGUAGE plpgsql STABLE;
【问题讨论】:
-
这个函数到底是做什么的?
-
@a_horse_with_no_name 上面显示的函数正在将 3 个值插入到返回表中,然后更新插入的值之一,即值为 3 的值。基本上我需要知道如何更新已经插入到返回表中的数据。如果可以更好地澄清,我可以在 Postgres 中发布一个示例。
-
当用正确的表名替换无效的
@table标识符时,插入和更新的编写方式可以相同(使用values子句,插入实际上可以写得更短)。但是单曲return最后做了什么?它返回什么? -
@a_horse_with_no_name 它不返回任何内容,在 MSSQL 中编写此类函数时需要它。我不确定您所说的“在替换无效的
@table标识符时可以以相同的方式编写”是什么意思。我会在 Postgres 中用什么替换它?我知道 INSERT 会变成 RETURN QUERY。 -
@a_horse_with_no_name 我编辑了我的问题以包含一个 Postgres 示例,如果这有帮助的话。
标签: sql-server postgresql function plpgsql