是调用函数select * from my_function()
的默认方式吗?
我问,因为我已经构建了一个不返回任何内容的函数,只是将数据插入表中(来自SQL Server后台),使用select * from...
我期待exec my_function()
答案 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)
@AbdisamadKhalif指出的PostgreSQL 11 supports true stored procedures。它们支持程序中的事务控制。
是的,这是标准方式,是的,这很奇怪。
通常,您可以编写存储过程等函数,并使用CALL
或EXECUTE
命令调用它们。 PostgreSQL不支持真正的存储过程(多个结果集,自治事务以及所有这些),只有可调用SQL的用户定义函数。
所以解决方法是SELECT function_name()
使用PostgreSQL扩展语法,省略FROM
或SELECT 1 FROM function_name();
(稍微)更标准。
ODBC驱动程序,JDBC驱动程序等了解{call func_name()}
转义语法并自动将其转换为基础SELECT
。
答案 2 :(得分:22)
当函数返回一个集合时,您将使用from
。如果函数返回void
,只需执行
select my_function();