参数化查询,集合做参数。(Oracle)

在进行数据库查询时,为了防止SQL注入,我们通常会采用参数化的查询。在参数化查询过程中,当遇到
in、exist等子句时无法正常工作。

针对这个问题,下面有一种变向的解决方案(Oracle)。
select id from lv.test
join table(
    xmlsequence(extract(xmltype('<ids><i>31059</i><i>44763</i></ids>'),'/ids/*'))) xu
    on id = to_number(extract(value(xu),'i/text()'));

将集合转换成xml字符串,变向的将集合参数转换成了字符串参数。

对于sqlserver,同样可以用openxml达到类似的目的。


性能方面:
当集合数量少的时候,直接采用in的方式性能更好,与上面方式相比约为 1:2
当集合数量达到80左右的时候,基本持平
更大的话上面方式的性能更好。(in本身更适用少数量集合)

当然上面只考虑执行速度(没考虑资源占用),且在在本机上做简单测试。

posted @ 2009-01-15 17:09  5yplan  阅读(2756)  评论(0编辑  收藏  举报