0
SimpleJDBCCallを使用してREF_CURSORでPostgreSQLストアドプロシージャを呼び出したいとします。SimpleJdbcCallとREF_CURSORを使用したPostgreSQLストアドプロシージャの呼び出し
org.postgresql.util.PSQLException: ERROR: cursor "cursor" does not exist
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2270)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1998)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:570)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:406)
at org.postgresql.jdbc2.AbstractJdbc2Connection.execSQLQuery(AbstractJdbc2Connection.java:339)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.internalGetObject(AbstractJdbc2ResultSet.java:213)
at org.postgresql.jdbc3.AbstractJdbc3ResultSet.internalGetObject(AbstractJdbc3ResultSet.java:36)
at org.postgresql.jdbc4.AbstractJdbc4ResultSet.internalGetObject(AbstractJdbc4ResultSet.java:312)
at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getObject(AbstractJdbc2ResultSet.java:2711)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:457)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:413)
at org.springframework.jdbc.core.JdbcTemplate$6.doInCallableStatement(JdbcTemplate.java:1068)
at org.springframework.jdbc.core.JdbcTemplate$6.doInCallableStatement(JdbcTemplate.java:1066)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:1016)
at org.springframework.jdbc.core.JdbcTemplate.call(JdbcTemplate.java:1066)
at org.springframework.jdbc.core.simple.AbstractJdbcCall.executeCallInternal(AbstractJdbcCall.java:397)
at org.springframework.jdbc.core.simple.AbstractJdbcCall.doExecute(AbstractJdbcCall.java:369)
at org.springframework.jdbc.core.simple.SimpleJdbcCall.execute(SimpleJdbcCall.java:173)
私がテストした:私は、エラーメッセージを受信したコードを実行する
JdbcTemplate jdbcTemplate = new JdbcTemplate(getDataSource());
jdbcTemplate.setResultsMapCaseInsensitive(true);
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate);
jdbcCall.withFunctionName("procName").returningResultSet("cursor",
BeanPropertyRowMapper.newInstance(CustomEntity.class));
Map m = jdbcCall.execute();
:
CREATE OR REPLACE FUNCTION public.procName()
RETURNS refcursor AS
$BODY$
DECLARE
ref1 refcursor := 'cursor';
BEGIN
open ref1 for SELECT * FROM public."tableName";
RETURN ref1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.procName()
OWNER TO postgres;
は、私は次のJavaコードを使用してプロシージャを呼び出そうとしました:私のストアドプロシージャは次のようになりますこのコードはOraceleストアドプロシージャを使用し、REF_CURSORも使用します。私はwithFunctionName()
の代わりにwithProcedureName()
メソッドを使用しました。ストアドプロシージャが正しく呼び出され、結果が返されます。
SimpleJDBCCallを使用してREF_CURSORを返すPostreSQLストアドプロシージャを呼び出す方法はありますか?
このコードスニペットは、(// meta.stackexchange.com/questions/114762/explaining-entirely-コードベース - 回答)[説明を含む]溶液が、本当に改善するのに役立つかもしれないがあなたの投稿の質。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。 – peacetype