56

是调用函数的默认方式select * from my_function()吗?

我问是因为我构建了一个不返回任何内容的函数,只是将数据插入到表中,并且(来自 SQL Server 背景)调用它“感觉”很奇怪select * from...

我期待类似的东西exec my_function()

4

3 回答 3

63

使用PERFORM声明 - http://www.postgresql.org/docs/current/static/plpgsql-statements.html

有时对表达式或 SELECT 查询求值但丢弃结果很有用,例如在调用具有副作用但没有有用结果值的函数时。要在 PL/pgSQL 中执行此操作,请使用 PERFORM 语句

所以它只是

DO $$ BEGIN
    PERFORM my_function();
END $$;
于 2013-08-19T14:16:03.977 回答
38

PostgreSQL 11:

正如@AbdisamadKhalif 所指出的,PostgreSQL 11支持真正的存储过程。它们支持过程中事务控制。

旧版本:

是的,这是标准方式,是的,这很奇怪。

通常你会编写诸如存储过程CALL之类的函数并使用orEXECUTE命令调用它们。PostgreSQL 不支持真正的存储过程(多个结果集、自治事务等等),只支持 sql-callable 用户定义函数

因此,解决方法是SELECT function_name()使用省略的 PostgreSQL 扩展语法FROM,或者SELECT 1 FROM function_name();(在某种程度上)更标准。

ODBC 驱动程序、JDBC 驱动程序等理解{call func_name()}转义语法并自动将其转换为底层的SELECT.

于 2013-08-20T01:05:49.770 回答
27

您将from在函数返回一个集合时使用。如果函数返回void就做

select my_function();
于 2013-08-19T14:16:29.000 回答