您的位置:首页 > 数据库 > Oracle

PreparedStatement中in子句的处理

2013-06-04 22:46 1881 查看

测试环境: 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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐