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

问题描述 投票:0回答:1

我正在使用 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
.

spring oracle stored-procedures plsql jdbctemplate
1个回答
0
投票

使用

NamedParameterJdbcTemplate.update(plsqlBlock, parameters)
.

https://stackoverflow.com/a/76226943/21880079

© www.soinside.com 2019 - 2024. All rights reserved.