gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:33:58 26 4
gpt4 key购买 nike

我有以下 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com