Spring boot 从Spring数据调用存储过程时出错

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行第

我尝试了几种不同的方法通过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:忽略语句

我试过:

 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");`