我有一个带有绑定(bind)变量的匿名 PL/SQL block ,我想通过 JDBC 运行它。
PL/SQL block 示例:
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 代码将使用带有 "?" 的转义语法来设置变量。所以这个 block 看起来像这样(如果我错了请纠正我):
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);
问题是在我的 block 中我有两个 "?" 用于替换绑定(bind)参数 :v_value。这意味着当使用转义语法时,只会设置第一个 "?"。第二个 "?" 将保留为“悬空”。
在这种情况下,当在 PL/SQL block 中多次使用相同的绑定(bind)变量时,我应该如何继续将其转换为 JDBC 转义语法?
编辑:
我找到了这个 question在与我的问题相关的 SO 上。我从中了解到,我必须重写所有在同一个 block 中使用多个绑定(bind)变量实例的匿名 PL/SQL block 。有什么解决方法吗?或者就是这样……游戏结束了……这就是 JDBC 的工作方式,我将不得不做出应有的贡献。
期待答案...为此搜索了 2 小时,但没有结果。
最佳答案
看看这个doc .
基本上,您可以像这样将相同的变量绑定(bind)为输入和输出:
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);
希望对你有帮助。
关于java - 使用 JDBC 编写带有绑定(bind)变量的匿名 PL/SQL block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19641333/