postgresql 如何编写不返回任何内容的 postgres 存储过程?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1343954/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How do I write a postgres stored procedure that doesn't return anything?
提问by ScArcher2
How do I write a simple stored procedure in postgres that doesn't return a value at all? Even with a void return type when I call the stored procedure I get a single row back.
如何在 postgres 中编写一个根本不返回值的简单存储过程?即使在调用存储过程时使用 void 返回类型,我也会返回单行。
CREATE FUNCTION somefunc(in_id bigint) RETURNS void AS $$
BEGIN
DELETE from test_table where id = in_id;
END;
$$ LANGUAGE plpgsql;
采纳答案by Michael Krelin - hacker
It's not the function that returns value, it's the SELECT
you used to call it. If it doesn't return any rows, it doesn't run your function.
不是返回值的函数,而是SELECT
您用来调用它的函数。如果它不返回任何行,则它不会运行您的函数。
回答by Michael Krelin - hacker
You can achieve "nothing returned" by abusing set-returning functions:
您可以通过滥用 set-returning 函数来实现“无返回”:
Simple function:
简单的功能:
create function x () returns setof record as $$
begin
return;
END;
$$ language plpgsql;
Now you can:
现在你可以:
# select x();
x
---
(0 rows)
In case it doesn't work for you (sorry, I'm using 8.5), try with this approach:
如果它对您不起作用(抱歉,我使用的是 8.5),请尝试使用以下方法:
# create function x (OUT o1 bool, OUT o2 bool) returns setof record as $$
begin
return;
END;
$$ language plpgsql;
CREATE FUNCTION
The parameters are irrelevant, but:
参数无关紧要,但是:
- You need > 1 of them
- They have to be named
- 你需要 > 1 个
- 他们必须被命名
And now you can:
现在你可以:
# select * from x();
o1 | o2
----+----
(0 rows)
回答by George Silva
You are doing just fine. You dont need to add anything else.
你做得很好。您无需添加任何其他内容。
The result of the row is null, so it is a void return.
该行的结果为空,因此它是一个空返回。
I don't think theres something you can do about that. Checking my void functions all of them are just like yours.
我认为你对此无能为力。检查我的 void 函数,它们都和你的一样。
returns void as $$ and no return statement in code block.
将 void 作为 $$ 返回,并且代码块中没有 return 语句。