我正在开发一个应用程序(使用旧版的Spring框架2.5)。任务是使用“org.springframework.jdbc.object.StoredProcedure”调用Oracle的存储过程。
奇怪的是,它可以编译、执行,没有报错,但返回的却是null而不是实际值。
我的测试过程(在一个包中)如下:
奇怪的是,它可以编译、执行,没有报错,但返回的却是null而不是实际值。
我的测试过程(在一个包中)如下:
procedure testprocedure(input1 IN varchar2,
input2 IN varchar2,
output1 OUT VARCHAR2,
output2 OUT VARCHAR2)
IS
BEGIN
output1 := 'return1';
output2 := 'return2';
END testprocedure;
Java代码如下:
public class TestClass extends StoredProcedure {
public static final String input1 = "input1";
public static final String input2 = "input2";
public static final String output1 = "output1";
public static final String output2 = "output2";
public TestClass() {
setSql("testpackage.testprocedure");
setFunction(false);
declareParameter(new SqlOutParameter(output1, Types.VARCHAR));
declareParameter(new SqlOutParameter(output2, Types.VARCHAR));
declareParameter(new SqlParameter(input1, Types.VARCHAR));
declareParameter(new SqlParameter(input2, Types.VARCHAR));
}
public TestReturn getTestProcedureOUTs (String pinput1, String pinput2) {
Map<String, Object> in = new HashMap<String, Object>();
in.put( input1, pinput1);
in.put( input2, pinput2);
System.out.println("Calling " + getSql() + " with parameters: " + in);
Map<String, Object> res = execute(in);
System.out.println("output is " + res);
return new TestReturn((String) res.get(output1), (String) res.get(output2));
}}
标准输出的输出结果为
output is {output2=null, output1=null}
我怀疑这与Windows版本(Windows 10), Java版本(1.7) Oracle驱动程序(ojdbc6.jar)有关。
或者是其他什么原因,对我来说太明显了看不到。