136

我想用pl/pgsql. 我正在使用PostgresEnterprise Manager v3并使用 shell 来创建一个函数,但是在 shell 中我必须定义返回类型。如果我不定义返回类型,我将无法创建函数。

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

4

3 回答 3

215

使用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;
于 2013-01-08T14:13:54.373 回答
2

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 |           |          | 
于 2021-11-23T06:01:54.970 回答
1

函数必须总是返回一些东西,尽管你可以使用像

do $$

并从正常功能开始

declare
...

但是如果你仍然想做一个函数,只需在return之后添加void

于 2020-04-08T09:51:43.283 回答