13

如何在 postgres 中编写一个根本不返回值的简单存储过程?即使在调用存储过程时返回类型为 void,我也会返回一行。

CREATE FUNCTION somefunc(in_id bigint) RETURNS void AS $$
BEGIN
   DELETE from test_table where id = in_id;
END;
$$ LANGUAGE plpgsql;
4

3 回答 3

8

它不是返回值的函数,而是SELECT你用来调用它的函数。如果它不返回任何行,则不会运行您的函数。

于 2009-08-27T22:00:34.783 回答
6

您可以通过滥用 set-returning 函数来实现“无返回”:

简单功能:

create function x () returns setof record as $$
begin
return;
END;
$$ language plpgsql;

现在你可以:

# select x();
 x
---
(0 rows)

如果它对您不起作用(对不起,我使用的是 8.5),请尝试以下方法:

# create function x (OUT o1 bool, OUT o2 bool) returns setof record as $$
begin
return;
END;
$$ language plpgsql;
CREATE FUNCTION

参数无关紧要,但是:

  • 您需要 > 1 个
  • 他们必须被命名

现在您可以:

# select * from x();
 o1 | o2
----+----
(0 rows)
于 2009-08-28T06:33:29.603 回答
5

你做得很好。您不需要添加任何其他内容。

该行的结果为空,因此它是一个空返回。

我认为您对此无能为力。检查我的 void 函数,它们都和你的一样。

返回 void 作为 $$ 并且代码块中没有 return 语句。

于 2009-08-27T22:00:52.130 回答