我在Spring 3.0中使用Oracle 11.2。
我需要知道是否可以将动态参数传递给匿名块,如果实现是JdbcTemplate StoredProcedure
,则目标存储过程将不会使用其中某些参数。这是场景:
我能够创建一个匿名块来调用JdbcTemplate's StoredProcedure
的存储过程。匿名阻止的原因是这些过程采用IN
已知的 BOOLEAN
值(在下面的情况下,false
),SQL不支持,但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
的值传递给同一个匿名块(不将其声明为存储过程的参数{ {1}}。
这样做的原因是将所有内容都放在一个匿名块调用中,而不是将select查询拆分为单独的JdbcTemplate调用,并根据结果设置stored_proc_call
,如bool1
。 / p>