如何编写一个不返回任何内容的postgres存储过程?

时间:2009-08-27 21:55:31

标签: postgresql stored-procedures plpgsql

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

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

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:6)

您可以通过滥用设置返回功能来实现“无任何返回”:

简单功能:

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)

答案 2 :(得分:5)

你做得很好。你不需要添加任何其他东西。

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

我不认为你可以做些什么。检查我的虚函数所有这些都和你的一样。

返回void as $$,代码块中没有return语句。