我使用JPA 2.1和hibernate作为实现供应商。
我正在尝试调用一个返回CLOB的存储过程。
StoredProcedureQuery storedProcQuery = entityManager.createStoredProcedureQuery("pkg_test.get_clob");
storedProcQuery .registerStoredProcedureParameter(1, String.class, ParameterMode.IN);
storedProcQuery .registerStoredProcedureParameter(2, String.class, ParameterMode.IN);
storedProcQuery .registerStoredProcedureParameter(3, oracle.sql.CLOB.class, ParameterMode.OUT);
storedProcQuery .setParameter(1, "ABCD");
storedProcQuery .setParameter(2, "XYZ");
storedProcQuery.execute(); //here i get the following exception.
*Caused by: org.hibernate.exception.SQLGrammarException: Error calling CallableStatement.getMoreResults
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
at org.hibernate.result.internal.OutputsImpl.convert(OutputsImpl.java:96)
at org.hibernate.result.internal.OutputsImpl.<init>(OutputsImpl.java:73)
at org.hibernate.procedure.internal.ProcedureOutputsImpl.<init>(ProcedureOutputsImpl.java:49)
at org.hibernate.procedure.internal.ProcedureCallImpl.buildOutputs(ProcedureCallImpl.java:426)
at org.hibernate.procedure.internal.ProcedureCallImpl.getOutputs(ProcedureCallImpl.java:378)
at org.hibernate.jpa.internal.StoredProcedureQueryImpl.outputs(StoredProcedureQueryImpl.java:251)
at org.hibernate.jpa.internal.StoredProcedureQueryImpl.execute(StoredProcedureQueryImpl.java:234)
... 33 more
Caused by: java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'GET_CLOB'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)*
这里我传递的类型为oracle.sql.CLOB.class,它是java.sql.CLOB的一个实现。
我已使用纯JDBC实现测试了相同的PL / SQL过程,并且其工作正常。
但是想要使用JPA2.1功能。
你能否告诉我上面的错误?
谢谢你。答案 0 :(得分:1)
它不是hibernate或jpa或java问题。 此错误来自您调用'GET_CLOB'过程
的oracle jdbc驱动程序检查oracle db error codes手册:
ORA-06550 :行字符串,列字符串:字符串
原因:发生了PL / SQL编译错误。为行和列指定的数字是发生错误的PL / SQL块中的位置。
操作:有关错误的详细信息,请参阅以下PL / SQL消息。
ORA-06550是发生语法错误的PL / SQL中的位置的错误点,后面是编译时错误的更具描述性的消息: