簡體   English   中英

Oracle在IN條件內使用字符串

[英]Oracle use a string inside IN condition

我有一個使用IN條件的select語句,在IN條件中有一個字符串...如何忽略單引號?

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

謝謝

in是與collections ,因此首先應將您的輸入字符串轉換為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執行查詢)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM