java - 使用 IN 和 OUT 参数扩展 Spring StoredProcedure

标签 java spring oracle stored-procedures

我有以下 Oracle PL/SQL 调用,运行得非常好:

declare
  dummy number;
begin
   my.proc(a => 89561,
           b => 1,
           c => 1,
           d => '',
           e => 1,
           f => 1,
           g => 1,
           h => 1,
           i => 1,
           j => 1,
           k => 1,
           l => 1,
           m => 1,
           n => 1,
           o => 1,
           p => 1,
          q => dummy);
 end;

我想以编程方式调用它,为此我创建了一个扩展org.springframework.jdbc.object.StoredProcedure的类。类如下:

import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.jdbc.object.StoredProcedure;

public class MySP extends StoredProcedure {

    private static final String PROC_NAME = "my.proc";

    public MySP(DataSource ds) {
        super(ds,PROC_NAME);
        compile();
    }

    public void execute() {
        Map<String, Object>  params = new HashMap<>();
        params.put("a", 89561L);
        params.put("b", 1L);
        params.put("c", 1L);
        params.put("d", "");
        params.put("e", 1L);
        params.put("f", 1L);
        params.put("g", 1L);
        params.put("h", 1L);
        params.put("i", 1L);
        params.put("j", 1L);
        params.put("k", 1L);
        params.put("l", 1L);
        params.put("m", 1L);
        params.put("n", 1L);
        params.put("o", 1L);
        params.put("p", 1L);
        params.put("q", 0L);
        super.execute(params);
    }
}

当我运行他的代码时,我收到以下 Oracle 错误:

PLS-00306:调用“proc”时参数数量或类型错误

我很确定错误来自于我传递“q”参数的方式......但找不到另一种传递它的方式。

有什么想法吗?

最佳答案

Spring StoredProcedure 要求您声明要传递的参数的类型。请参阅下面的示例。

public class MySP extends StoredProcedure {
    private static final String PROC_NAME = "my.proc";

    public MySP(DataSource ds) {
        super(ds,PROC_NAME);

        //declaraction of parameters
        declareParameter(new SqlParameter("x", java.sql.Types.NUMERIC));
        declareParameter(new SqlOutParameter("y", java.sql.Types.VARCHAR));
        declareParameter(new SqlInOutParameter("z", java.sql.Types.VARCHAR));
    }
    public void execute() {
        Map<String, Object>  params = new HashMap<>();
        params.put("x", 89561L);
        params.put("y", 1L);
        params.put("z", 1L);

        super.execute(params);
    }

}

关于java - 使用 IN 和 OUT 参数扩展 Spring StoredProcedure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37683690/

相关文章:

java - Jackson:从 JSON 数组中获取没有 id 的单个值

java - 导入其他 Spring Boot 应用程序而不使用它的 beans

spring - 在 Spring 5 中与子级共享父级 Spring 上下文

sql - 如何在sql developer的 "Enter Binds"对话框中使用日期变量?

java - JDBC - Oracle - BatchUpdateException.getUpdateCounts() 返回空白数组

java - 将 java 编译成 ,class 时出错(转到)

java - ${pageContext.request.contextPath} 如何在本地和远程工作?

java - 自定义 JSON 序列化和反序列化

java - 当 @Embedded 字段的所有列均为 NULL(JPA/Hibernate)时 - 如何防止空指针?

sql - 错误 : PL/SQL: Compilation unit analysis terminated?