我正在使用 Oracle 11.2 和 Spring 3.0.
我需要知道是否可以将动态参数传递给匿名块,如果实现是
JdbcTemplate StoredProcedure
,其中一些参数将不会被目标存储过程使用。这是场景:
我能够创建一个匿名块来调用带有
JdbcTemplate's StoredProcedure
的存储过程。匿名块的原因是程序采用 SQL 不支持的 IN
known BOOLEAN
值(在下面的例子中,false
),但 PL/SQL 支持,即:
declare
bool1_value boolean := false;
bool2_value boolean := false;
begin
stored_proc_call(param1 => :param1_value,
bool1 => bool1_value,
bool2 => bool2_value);
end;
我可以通过在
param1_value
类中声明和设置参数变量来传递StoredProcedure
。但是,我遇到了一些程序,例如,需要根据另一个查询的结果来确定bool1
,即:
declare
bool1_value boolean := false;
bool2_value boolean := false;
begin
for x in ( select count(*) rows
from dual
where exists (
select null
from some_table s
where s.id = :id
) )
loop
if ( x.rows = 1 )
then
bool1_value := true;
else
bool1_value := false; -- don't worry about the redundancy here
end if;
end loop;
stored_proc_call(param1 => :param1_value,
bool1 => bool1_value,
bool2 => bool2_value);
end;
如您所见,我想知道是否有一种方法可以通过
id
将StoredProcedure
的值传递给同一个匿名块(而不将其声明为存储过程的参数stored_proc_call
.
这样做的原因是将所有内容都放在一个匿名块调用中,而不是将选择查询拆分为一个单独的 JdbcTemplate 调用,并根据结果将
bool1
设置为 param1
.
使用
NamedParameterJdbcTemplate.update(plsqlBlock, parameters)
.