用exec调用函数而不是select

时间:2013-08-19 13:56:49

标签: postgresql psql

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

我问,因为我已经构建了一个不返回任何内容的函数,只是将数据插入表中(来自SQL Server后台),使用select * from...

我期待exec my_function()

之类的东西

3 个答案:

答案 0 :(得分:45)

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

  

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

所以它只是

DO $$ BEGIN
    PERFORM my_function();
END $$;

答案 1 :(得分:36)

PostgreSQL 11:

@AbdisamadKhalif指出的PostgreSQL 11 supports true stored procedures。它们支持程序中的事务控制。

旧版本:

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

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

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

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

答案 2 :(得分:22)

当函数返回一个集合时,您将使用from。如果函数返回void,只需执行

select my_function();