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

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

解决方案

这不是一个返回值的函数,这是你以前称之为SELECT。如果它不返回任何行,它不会运行功能。

其他提示

您可以通过滥用设置返回函数来实现“不返回任何内容”:

简单功能:

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)

您正在做的就好了。你不需要添加任何东西。

行的结果是零,所以它是一个无效的回报。

我不认为有件事你可以做的。检查我的void函数个个就像你的。

返回void如$$和在代码块中没有返回语句。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top