用exec调用函数而不是select

Die*_*ego 47 postgresql psql

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

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

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

Rom*_*kar 46

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

有时,为了计算表达式或SELECT查询,但主叫具有副作用,但没有有用的结果值的函数当丢弃该结果,例如有用的.要在PL/pgSQL中执行此操作,请使用PERFORM语句

所以这只是

DO $$ BEGIN
    PERFORM my_function();
END $$;
Run Code Online (Sandbox Code Playgroud)

  • `PERFORM`仅在PL/PgSQL中有效.你不能单独使用它. (16认同)

Cra*_*ger 37

PostgreSQL 11:

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

旧版本:

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

通常,您可以编写诸如存储过程之类的函数,并使用CALLor EXECUTE命令调用它们.PostgreSQL不支持真正的存储过程(多个结果集,自治事务,以及所有这些),只有sql可调用的用户定义函数.

因此,解决方法是SELECT function_name()使用PostgreSQL扩展语法,省略FROMSELECT 1 FROM function_name();(稍微)更标准.

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


Clo*_*eto 24

您将from在函数返回集合时使用.如果函数返回void只是做

select my_function();
Run Code Online (Sandbox Code Playgroud)