Spring boot 从Spring数据调用存储过程时出错
我尝试了几种不同的方法通过spring boot应用程序访问我的存储过程,但总是出现以下错误: InvalidDataAccessResourceUsageException:无法提取结果集;SQL[n/a];嵌套异常为org.hibernate.exception.sqlgrammareexception:无法提取结果集 或 原因:java.sql.SQLException:ORA-06550:第1行第7列: PLS-00201:必须声明标识符“我的存储过程名称” ORA-06550:第1行第7列: PL/SQL:忽略语句 我试过:Spring boot 从Spring数据调用存储过程时出错,spring-boot,plsql,spring-data-jpa,Spring Boot,Plsql,Spring Data Jpa,我尝试了几种不同的方法通过spring boot应用程序访问我的存储过程,但总是出现以下错误: InvalidDataAccessResourceUsageException:无法提取结果集;SQL[n/a];嵌套异常为org.hibernate.exception.sqlgrammareexception:无法提取结果集 或 原因:java.sql.SQLException:ORA-06550:第1行第7列: PLS-00201:必须声明标识符“我的存储过程名称” ORA-06550:第1行第
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();
但他似乎总是无法访问我数据库中的存储过程:
我在…上加了格兰特执行。。。到但这并不能解决问题
如果您有任何想法,请谢谢您的回复 因此,我解决了与调用存储过程相关的错误,方法是将过程的名称与其所有者名称放在前面:
my\u schema.my\u存储过程\u name
和使用
执行即时更新
在存储过程内部
java代码
`StoredProcedureRequesty程序查询
entityManager.createStoredProcedureQuery(“我的模式。我的存储过程名称”)
您是如何创建该过程的?如果您(碰巧)使用了双引号,那么您必须使用双引号来调用它,并指定字母大小写,就像在CREATE PROCEDURE命令中一样。@Littlefoot,这是我的PLSQL过程
创建或替换过程my_SHEMA的签名。my_PROCEDURE_名称(paramout NUMBER)
@Littlefoot,这是我的PLSQL过程创建或替换过程my_SHEMA的签名。我的存储过程名称(paramout OUT NUMBER)
然后双引号不是问题。您作为程序的所有者有联系吗?如果没有,并且-表示您授予了特权-查看前面过程的名称及其所有者名称是否有帮助,即调用my_schema.my_storaged_procedure_name
。我现在有一个类似“java.sql.SQLException:ORA-06550:第1行”的错误,第7列:PLS-00306:调用“我的存储过程”ORA-06550:第1行,第7列:PL/SQL:语句被忽略我没有输入参数我只有一个输出参数
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");`