使用Spring的JdbcTemplate StoredProcedure将动态参数传递给PL / SQL匿名块

时间:2014-07-06 23:49:08

标签: spring oracle stored-procedures plsql jdbctemplate

我在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;

如您所见,我想知道是否有办法通过idStoredProcedure的值传递给同一个匿名块(不将其声明为存储过程的参数{ {1}}。

这样做的原因是将所有内容都放在一个匿名块调用中,而不是将select查询拆分为单独的JdbcTemplate调用,并根据结果设置stored_proc_call,如bool1。 / p>

0 个答案:

没有答案