是调用函数的默认方式select * from my_function()
吗?
我问是因为我构建了一个不返回任何内容的函数,只是将数据插入到表中,并且(来自 SQL Server 背景)调用它“感觉”很奇怪select * from...
我期待类似的东西exec my_function()
是调用函数的默认方式select * from my_function()
吗?
我问是因为我构建了一个不返回任何内容的函数,只是将数据插入到表中,并且(来自 SQL Server 背景)调用它“感觉”很奇怪select * from...
我期待类似的东西exec my_function()
使用PERFORM
声明 - http://www.postgresql.org/docs/current/static/plpgsql-statements.html
有时对表达式或 SELECT 查询求值但丢弃结果很有用,例如在调用具有副作用但没有有用结果值的函数时。要在 PL/pgSQL 中执行此操作,请使用 PERFORM 语句
所以它只是
DO $$ BEGIN
PERFORM my_function();
END $$;
正如@AbdisamadKhalif 所指出的,PostgreSQL 11支持真正的存储过程。它们支持过程中事务控制。
是的,这是标准方式,是的,这很奇怪。
通常你会编写诸如存储过程CALL
之类的函数并使用orEXECUTE
命令调用它们。PostgreSQL 不支持真正的存储过程(多个结果集、自治事务等等),只支持 sql-callable 用户定义函数。
因此,解决方法是SELECT function_name()
使用省略的 PostgreSQL 扩展语法FROM
,或者SELECT 1 FROM function_name();
(在某种程度上)更标准。
ODBC 驱动程序、JDBC 驱动程序等理解{call func_name()}
转义语法并自动将其转换为底层的SELECT
.
您将from
在函数返回一个集合时使用。如果函数返回void
就做
select my_function();