gpt4 book ai didi

sql-server - 在 Postgres 函数中访问返回表

转载 作者:行者123 更新时间:2023-11-29 11:42:55 24 4
gpt4 key购买 nike

在 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;

最佳答案

在使用 RETURN NEXT or RETURN QUERY 发送后,您无法更改函数的结果集.

但是在 PostgreSQL 中,您不必在单个语句中发送整个结果集(这就是为什么您的要求在 PostgreSQL 中毫无意义)。您可以使用 RETURN NEXT 将行逐行发送到结果集,您可以使用 RETURN QUERY/RETURN QUERY 发送结果集的 block EXECUTE,或者你甚至可以混合它。 (您也可以使用不带参数的单个 RETURN 退出该函数)。

所以,您可能想要做的是:

CREATE FUNCTION test_func() RETURNS TABLE(id int) AS $$
BEGIN
RETURN QUERY VALUES (1), (2);
-- do some calculation
RETURN NEXT -1;
END;
$$ LANGUAGE plpgsql STABLE;

如果你真的想模仿what MSSQL does ,您可以使用临时表,或者(最好)在函数内部进行子选择:

CREATE FUNCTION test_func() RETURNS TABLE(id int) AS $$
BEGIN
RETURN QUERY SELECT (SELECT CASE WHEN v = 3 THEN -1 ELSE v END res)
FROM (VALUES (1), (2), (3)) v;
END;
$$ LANGUAGE plpgsql STABLE;

关于sql-server - 在 Postgres 函数中访问返回表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34268509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com