我有一个场景,我需要将CSV格式字符串中的'name id'作为绑定参数传递给SQL查询,并检查表中是否存在任何id。它是一种id的数组的XOR,表名中的表名为id。
我无法得到如何做到这一点(数组到列比较)。你能指点我这个方向吗?
我无法使用Java或PL / Sql,因为我的查询将由另一个在运行时进行处理的团队使用。
答案 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
答案 1 :(得分:0)
您可以使用以下命令将单个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... )