Oracle在IN条件中使用字符串

时间:2016-09-02 10:22:15

标签: php sql oracle

我有一个select语句,我使用IN条件,在IN条件中我有一个字符串...我怎么能忽略单引号?

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

由于

2 个答案:

答案 0 :(得分:1)

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, '[^,]+')
    )
顺便说一句,如果org_id in ()true,则此:input_id将返回null

另一种方法将首先将整个查询构造为字符串,然后使用execute immediatephp执行。然而,这可能引起sql injection关注。

答案 1 :(得分:0)

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

一种方法使用like(或正则表达式):

Select *
from employ
where id = 12 and
      ',' || org_id || ',' like '%,' || {$id} || ',%';

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