[英]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_id
為null
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.