1

我有一个匿名 PL/SQL 块,其中包含我想通过 JDBC 运行的绑定变量。

PL/SQL 块示例:

variable v_value number
declare
v_return varchar2(30);
begin
:v_value:=300;
select ename into v_return from emp where empno=:v_value;
end;

相应的 Java 代码将使用带有“?”的转义语法。设置变量。所以这个块看起来像这样(如果我错了,请纠正我):

String block = "declare v_return varchar2(30);" +
               "begin" + 
               "? := 300;" +
               "select ename into v_return from emp where empno = ?;" +
               "end;"

现在,假设我的变量是一个 INPUT 参数,我必须像这样设置参数:

// omitting the CallableStatement and conn declarations
cs = conn.prepareCall(block);

cs.setInt(parameterIndex, parameterValue);

问题是在我的街区里我有两个“?” 用于替换绑定参数:v_value。这意味着当使用转义语法时,只有第一个“?” 将被设置。第二个“?” 将被“挂起”。

在这种情况下,当在 PL/SQL 块中多次使用相同的绑定变量时,我应该如何继续在 JDBC 转义语法中翻译它?

编辑:

我在 SO 上发现了这个与我的问题有关的问题我从中了解到的是,我必须重写所有在同一块中使用多个绑定变量实例的匿名 PL/SQL 块。有什么解决方法吗?或者这就是它...游戏结束...这是 JDBC 的工作方式,我将不得不做出应有的贡献。



期待答案...搜索了 2 个小时,没有结果。

4

2 回答 2

3

看看这个文档

基本上,您可以像这样绑定与输入和输出相同的变量:

CallableStatement call = conn.prepareCall(
    "{CALL doubleMyInt(?)}");
// for inout parameters, it is good practice to
// register the outparameter before setting the input value
call.registerOutParameter(1, Types.INTEGER);
call.setInt(1,10);

我希望它有所帮助。

于 2014-08-22T10:28:40.060 回答
2

试试这个查询:

String block = "declare " +
               "   v_return varchar2(30);" +
               "begin" + 
               "   select ename into v_return from emp where empno = ?;" +
               "   ? := v_return; " +
               "end;";
CallableStatement cs = connection.prepareCall( block );
cs.setInt( 1, v_value );
cs.registerOutParameter( 2, java.SQL.VARCHAR );
cs.executeUpdate();
String result = cs.getString( 2 );

有关更多详细信息和示例,请参见以下链接:http:
//docs.oracle.com/cd/E11882_01/java.112/e16548/getsta.htm#JJDBC28075
http://docs.oracle.com/cd/E11882_01/java。 112/e16548/oraint.htm#JJDBC28168

于 2013-10-28T22:19:43.983 回答