如何创建不返回任何值的函数

我想用 pl/pgsql写一个函数。 我使用 企业后期管理器 v3和 shell 来创建一个函数,但是在 shell 中我必须定义返回类型。如果不定义返回类型,就无法创建函数。

如何创建一个没有返回结果的函数,即创建一个新表的函数?

126944 次浏览

使用 RETURNS void如下:

CREATE FUNCTION stamp_user(id int, comment text) RETURNS void AS $$
#variable_conflict use_variable
DECLARE
curtime timestamp := now();
BEGIN
UPDATE users SET last_modified = curtime, comment = comment
WHERE users.id = id;
END;
$$ LANGUAGE plpgsql;

函数必须总是返回某些内容,尽管您可以使用

do $$

从正常功能开始,比如

declare
...

但是如果你仍然想做一个函数只需要在 报税表后面加上 无效

PostgreSQL 11 + : PROCEDURE

PostgreSQL 11引入了 PROCEDUREs ,它们基本上是不返回任何值的函数,但是使用 CALL而不是 SELECT调用,

如何创建一个没有返回结果的函数,即创建一个新表的函数?

像这样,

=# CREATE PROCEDURE create_table_foo()
AS $$
CREATE TABLE foo ( id int )
$$ LANGUAGE sql;


=# CALL create_table_foo();




=# \d foo;
Table "public.foo"
Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id     | integer |           |          |

添加到已接受的答案中,如果在调用函数时看到错误 query has no destination for result data,那么您很可能在某个语句中使用了函数中的 SELECT。将 SELECT替换为 PERFORM,然后使用 SELECT yourFunction()按正常方式调用函数。

注意: PERFORM仅在 pl/pgsql 上下文中有效