2011-11-28 71 views
1

我有一個場景,我需要將CSV格式字符串中的'name ids'作爲綁定參數傳遞給SQL查詢,並檢查表中是否存在任何該ID 。它與表格中的列中的表名id相關的ID數組的異或。在SQL查詢中執行兩個數組的XOR

我無法知道如何做到這一點(數組與列的比較)。你能指出我朝那個方向嗎?

我無法使用Java或PL/Sql,因爲我的查詢將被另一個在運行時處理的團隊使用。

+0

你還沒有提出過一個問題 – Icarus

+0

編輯了這個問題:) – Himz

+0

編輯了答案:) –

回答

2

,如果你綁定多個值,而不是單個字符串, 你可以從你的CSV值做一個表:

select column_value as id 
from table(sys.dbms_debug_vc2coll('linia 1','linia 2','linia 3')) 

並使用如下語句使XOR

select a.id,b.id 
from 
    table a 
    full outer join 
    (query)b 
    on a.id=b.id 

希望這可以幫助你。

更新:我發現here查詢從CSV格式的值,製作表格:

with query2 as (
    select substr(:mylist, 
        instr(','||:mylist||',', ',', 1, rn), 
        instr(','||:mylist||',', ',', 1, rn+1) 
        - instr(','||:mylist||',', ',', 1, rn) - 1) value 
    from (select rownum rn from dual 
     connect by level 
         <= length(:mylist)-length(replace(:mylist,',',''))+1) 
    ) 
    select value 
    from query2 
0
在Oracle 10g及以上版本可以轉換一個CSV參數(mycsv)使用列

SELECT REGEXP_SUBSTR(mycsv,'[^,]+',1,LEVEL) element       
FROM dual      
CONNECT BY LEVEL < LENGTH(REGEXP_REPLACE(mycsv,'[^,]+')) + 1 

然後使用IN子句和上述作爲一個子查詢

SELECT * FROM t1 
WHERE id IN (....the query above...)