我试图调用一个基本的oracle pl/sql存储过程,该过程从表student(姓名、年龄、电子邮件)返回一个字符串。我使用的是命名存储过程注释,但在执行逻辑时出错。谢谢你的帮助。
CREATE OR REPLACE PROCEDURE p_findemail (email OUT VARCHAR2)
IS
BEGIN
SELECT EMAIL INTO email FROM STUDENT WHERE ID=1;
END p_findemail;
@Entity
@Table(name="Student")
@NamedStoredProcedureQueries({
@NamedStoredProcedureQuery(
name="p_findemail",
procedureName = "p_findemail",
parameters = {
@StoredProcedureParameter(name="email" , mode = ParameterMode.OUT , type=String.class)
}
)
})
public class Student {
@Repository
public interface StudentRepository extends CrudRepository<Student,Long>{
@Procedure(value = "p_findemail",
name = "p_findemail",
outputParameterName = "email")
String findstudentbyid();
}
这就是我犯的错误
错误2864---[nio-8080-exec-1]o.a.c.c.c.[/]。[dispatcherServlet]:Servlet。路径为[]的上下文中servlet[dispatcherServlet]的service()引发异常[Request processing failed;嵌套异常为org.springframework.dao.InvalidDataAccessApiUsageException:位置参数[1]未注册到此过程调用中;嵌套的例外是java。lang.IllegalArgumentException:位置参数[1]未在此过程调用]中注册,这是根本原因
java.lang.IllegalArgument异常:位置参数[1]没有与此过程调用注册在org.hibernate.query.procedure.internal.过程参数etadata.get查询参数(过程参数etadata.java:141)
问题似乎是Spring-Data-JPA
[https://github.com/spring-projects/spring-data-jpa/issues/2188][1]
对我有效的解决方案是:
将参数更改为INOUT
@StoredProcedureParameter(name="email" , mode = ParameterMode.INOUT ,
type=String.class)
从存储库调用存储过程时
@Procedure(name = STORED_PROC_NAME)
// email is passed as null
String findstudentbyid(@Param("email") String email);
and pass this email as null.
PS:根据存储的pro返回的内容,您可能必须使用Map或String作为返回类型。
问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’
问题内容: 我在任何地方都找不到此答案,但是可以从MySQL中的另一个存储过程调用存储过程吗?我想找回标识值,并在父存储过程中使用它。我们不能再使用FUNCTIONS! 问题答案: 参数应该可以帮助您将值返回给调用过程。基于此,解决方案必须是这样的。
我使用JDBC这样调用这个过程: 它向我抛出一个错误,通知调用格式错误。 但是如果我像这样直接在IDE中运行调用:
从1.r.58开始, 支持出参, 之前的版本仅支持入参. 从实现方式上说, 是通过扩展自定义SQL的含义及上下文来实现 仅含义入参的存储过程 // 建表,删除老的存储过程. dao.create(Pet.class, true); dao.insert(Pet.create("wendal")); dao.execute(Sqls.create("DROP PRO
问题内容: 我正在编写一个简单的Web应用程序以调用存储过程并检索一些数据。它是一个非常简单的应用程序,可以与客户的数据库进行交互。我们传递员工ID和公司ID,存储过程将返回员工详细信息。 Web应用程序无法更新/删除数据,并且正在使用SQL Server。 我正在Jboss AS中部署Web应用程序。我应该使用JPA访问存储过程还是。在这种情况下使用JPA的任何优势。 调用该存储过程的sql语句
问题内容: 我希望能够在PetaPoco中使用命名参数调用存储的proc。 为了调用执行搜索/获取的存储过程: 我可以做这样的事情: 另外,如何调用执行插入操作的存储过程? 谢谢,Nac 问题答案: 更新: 我尝试了以下操作来进行获取和插入,并且效果很好: 可以进一步改进以传递SQL参数。