Oracle在IN条件中使用字符串


Oracle use a string inside IN condition

我有一个选择语句,我使用IN条件,在IN条件内,我有一个字符串…如何忽略单引号?

Select * from employ where id = 12 and org_id in ({$id})
$id = '12,13'

谢谢

incollections一起使用,因此您的输入字符串首先应转换为collection(通过基于逗号分隔符的分行)

试试这样

Select * from employ where id = 12 and org_id in (
SELECT decode(:input_id,null,  (select  employ.org_id from dual) 
,TRIM(REGEXP_SUBSTR(temp, '[^,]+', 1, level)) )  
    FROM (SELECT  :input_id temp FROM DUAL)
    CONNECT BY level <= REGEXP_COUNT(temp, '[^,]+')
    )
顺便说一下,如果:input_idnull,这个org_id in ()将返回true

另一种方法是首先将整个查询构造为字符串,然后使用execute immediate或通过php执行。然而,这可能会引起sql注入问题。

我猜您想处理一个列表。不幸的是,SQL不允许参数是一个列表,所以你必须做更多的工作。

一种方法使用like(或正则表达式):
Select *
from employ
where id = 12 and
      ',' || org_id || ',' like '%,' || {$id} || ',%';

如果性能是一个问题,并且您希望使用索引,则可能需要研究其他选项。最简单的方法是省略参数,只修改查询字符串(使用动态SQL执行查询)。