在我的JDBC模板中,我想为某些行执行PostgreSQL函数。目前,我这样做:
JdbcTemplate t = ...;
String q = "select my_function(table.identifier) from table where ...`;
template.query(q, new Object[]{...}, result -> null);
在这里result -> null
是一个ResultSetExtractor
,它只是忽略了结果集和结果null
。我这样做是因为我并不真正关心my_function
函数的结果。我只是想为选定的行执行它。
有更清洁的方法吗?虽然它完美无缺,但至少在我看来它是有点hackisch。
如果你想避免将结果发送到客户端,请在PERFORM
语句中使用PL / pgSQL的DO
:
DO $$BEGIN PERFORM myfunction(...) FROM ...; END;$$;
你只需将PERFORM
放在通常写SELECT
的地方。
我承认这也是一种黑客行为,但至少它具有明显的性能优势。