我为postgresql
创建了以下函数:
CREATE FUNCTION myfunc(param INT) RETURNS VOID AS..
如何在没有SELECT
的情况下调用该函数?
当我运行SELECT myfunc(1)
时它会起作用,即使它没有按设计返回任何内容。
但是我想在没有选择的情况下运行它,只有myfunc(1)
,这不起作用并告诉我Syntax error at 1
。
我正在尝试从Insert, on duplicate update in PostgreSQL?实现db_merge函数。
我无法从java运行SELECT db_merge(..)
,因为这会给我"A result was returned when none was expected."), PSQLState.TOO_MANY_RESULTS)
错误。
答案 0 :(得分:2)
你不能那样做(如果没有在PostgreSQL中发出SELECT
语句就不能调用存储的函数)。另外,PostgreSQL does not support CALL
语句。
有关PostgreSQL中calling functions的更多信息。
注意:在PL / pgSQL上下文中,如果被调用的函数有SELECT
,则必须使用PERFORM
(而不是RETURNS void
)。
修改强>:
如果是JDBC,请不要使用executeUpdate()
,只需像使用任何其他SELECT语句一样使用execute()
。
对于Spring的JdbcTemplate:execute(String)
是为DDL语句设计的;使用其中一个&简单地丢弃结果:
query(String, ResultSetExtractor)
query(String, RowCallbackHandler)
query(String, RowMapper)
答案 1 :(得分:0)
Postgres消息传递协议允许direct function invocation,而Postgres JDBC驱动程序通过Fastpath class公开此消息。 driver documentation解释了如何设置它。