2011-11-28 3 views
1

SQL 쿼리에 바인드 매개 변수로 CSV 형식 문자열로 'name ids'를 전달해야하며 해당 ID가 테이블에 있는지 확인해야합니다 . table의 column에있는 table name-id를 가진 id 배열 배열의 XOR입니다.SQL 쿼리에서 두 배열 XOR 가져 오기

이 작업을 수행하는 방법 (배열 비교)을 수행 할 수 없습니다. 그 방향으로 나를 가르쳐 주시겠습니까?

런타임시 처리하는 다른 팀에서 내 쿼리를 사용하므로 Java 또는 PL/Sql을 사용할 수 없습니다.

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 

희망을 만들기 위해이 같은 문을 사용 : 여러 값이 아니라 하나의 문자열, 을 결합하면

+0

아직 질문하지 않았습니다 – Icarus

+0

수정 된 질문 : – Himz

+0

대답을 편집했습니다 : –

답변

2

당신은 당신의 CSV 값에서 테이블을 만들 수 있습니다 이것은 당신을 돕는다. UPDATE

: 나는 here CSV 형식의 값에서 테이블을 만드는 쿼리를 발견

오라클 10g 및 사용 열에 하나의 CSV 매개 변수 (mycsv를) 변환 할 수 있습니다 위의
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

:

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...)