PreparedStatement中in子句的处理

测试环境: Oracle 10g

1.原理

select * from table(split('a,b,c'))
结果:
a
b
c
2.结论

对于类似:

select * from xxx_table where xxx_column in ('xxa', 'xxb', 'xxc')
可动态传入in子句参数
select * from xxx_table where xxx_column in (select * from table(split(?)))
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setObject(1, "xxa,xxb,xxc");


附split函数:

create or replace type split_tbl as table of varchar(32767);
/

create or replace function split
(
  p_list varchar2,
  p_del varchar2 := ','
) return split_tbl pipelined
is
  l_idx    pls_integer;
  l_list    varchar2(32767) := p_list;
  l_value    varchar2(32767);
begin
  loop
    l_idx := instr(l_list,p_del);
    if l_idx > 0 then
      pipe row(substr(l_list,1,l_idx-1));
      l_list := substr(l_list,l_idx+length(p_del));
    else
      pipe row(l_list);
      exit;
    end if;
  end loop;
  return;
end split;
/

原文:http://stackoverflow.com/questions/178479/preparedstatement-in-clause-alternatives

转载于:https://my.oschina.net/canghailan/blog/135620

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值