如何在 postgres 中编写一个根本不返回值的简单存储过程?即使在调用存储过程时返回类型为 void,我也会返回一行。
CREATE FUNCTION somefunc(in_id bigint) RETURNS void AS $$
BEGIN
DELETE from test_table where id = in_id;
END;
$$ LANGUAGE plpgsql;
如何在 postgres 中编写一个根本不返回值的简单存储过程?即使在调用存储过程时返回类型为 void,我也会返回一行。
CREATE FUNCTION somefunc(in_id bigint) RETURNS void AS $$
BEGIN
DELETE from test_table where id = in_id;
END;
$$ LANGUAGE plpgsql;
它不是返回值的函数,而是SELECT
你用来调用它的函数。如果它不返回任何行,则不会运行您的函数。
您可以通过滥用 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
参数无关紧要,但是:
现在您可以:
# select * from x();
o1 | o2
----+----
(0 rows)
你做得很好。您不需要添加任何其他内容。
该行的结果为空,因此它是一个空返回。
我认为您对此无能为力。检查我的 void 函数,它们都和你的一样。
返回 void 作为 $$ 并且代码块中没有 return 语句。