pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
PostgreSQL 的 JDBC 驱动完全 支持调用 PostgreSQL 存储函数。
例 31.4. 调用一个内置存储函数
这个例子展示如何调用 一个 PostgreSQL 内置 函数 upper,它只是把提供的字符串参数 转换为大写。
// Turn transactions off.
con.setAutoCommit(false);
// Procedure call.
CallableStatement upperProc = con.prepareCall("{ ? = call upper( ? ) }");
upperProc.registerOutParameter(1, Types.VARCHAR);
upperProc.setString(2, "lowercase to uppercase");
upperProc.execute();
String upperCased = upperProc.getString(1);
upperProc.close();
CallableStatement 接口适用于 Statement 和 PreparedStatement 的所有注意事项 同样适用于 CallableStatement,但此外 你还必须考虑一个额外的限制:
只能在一个事务内部调用存储函数。
ResultSetPostgreSQL 的存储函数 可以通过 refcursor 值返回结果。一个 refcursor。
作为对 JDBC 的扩展, PostgreSQL JDBC 驱动可以把 refcursor 值作为 ResultSet 值返回。
例 31.5. 从函数获取 refcursor 值
在调用一个返回 refcursor 的函数时,你必须把 getObject 的返回类型强制转换为 ResultSet
// Turn transactions off.
con.setAutoCommit(false);
// Procedure call.
CallableStatement proc = con.prepareCall("{ ? = call doquery ( ? ) }");
proc.registerOutParameter(1, Types.Other);
proc.setInt(2, -1);
proc.execute();
ResultSet results = (ResultSet) proc.getObject(1);
while (results.next()) {
// do something with the results...
}
results.close();
proc.close();
也可以把 refcursor 返回值本身当作一个独立的类型对待。JDBC 驱动 为此提供了 org.postgresql.PGRefCursorResultSet 类。
例 31.6. 把 refcursor 当作一个独立的 类型对待
con.setAutoCommit(false);
CallableStatement proc = con.prepareCall("{ ? = call doquery ( ? ) }");
proc.registerOutParameter(1, Types.Other);
proc.setInt(2, 0);
org.postgresql.PGRefCursorResultSet refcurs
= (PGRefCursorResultSet) con.getObject(1);
String cursorName = refcurs.getRefCursor();
proc.close();
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。