Reputation: 71
I tried several different ways to access to my stored procedure via my spring boot application but I have always Errors like :
InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
or
Caused by: java.sql.SQLException: ORA-06550: line 1, column 7: PLS-00201: identifier 'MY_STORED_PROCEDURE_NAME' must be declared ORA-06550: line 1, column 7: PL/SQL: Statement ignored
I tried :
StoredProcedureQuery procedureQuery = entityManager.createStoredProcedureQuery("MY_STORED_PROCEDURE_NAME");
procedureQuery.registerStoredProcedureParameter("paramOut", Object.class, ParameterMode.OUT);
procedureQuery.execute();
procedureQuery.getOutputParameterValue("paramOut");
@Transactional
@Procedure(procedureName= "MY_STORED_PROCEDURE_NAME" )
Object getNextNumber();
@Query(value = "{call MY_STORED_PROCEDURE_NAME()}", nativeQuery = true)
@Transactional
Object getNextNumber();
but always it seems he can't reach my stored procedure in my DB : I added grand grant execute on ... to ... but that doesn't solve the problem
any idea, please
Upvotes: 1
Views: 2546
Reputation: 71
Thank you for your response So I resolved the bug related to call the stored procedure by preceding procedure's name with its owner name :
my_schema.my_stored_procedure_name
and use
EXECUTE IMMEDIATE 'UPDATE ...
inside the stored procedure
java code
`StoredProcedureQuery procedureQuery entityManager.createStoredProcedureQuery("my_schema.MY_STORED_PROCEDURE_NAME");
procedureQuery.registerStoredProcedureParameter("in1", Long.class,
ParameterMode.IN);
procedureQuery.registerStoredProcedureParameter("in2", String.class,
ParameterMode.IN);
procedureQuery.registerStoredProcedureParameter("out1", Long.class,
ParameterMode.OUT);
procedureQuery.registerStoredProcedureParameter("out2", String.class,
ParameterMode.OUT);
procedureQuery.setParameter("in1", val1);
procedureQuery.setParameter("in2", val2);
procedureQuery.execute();
procedureQuery.getOutputParameterValue("out1");
procedureQuery.getOutputParameterValue("out2");`
Upvotes: 1