我有一个场景,我需要将CSV格式字符串中的'name ids'作为绑定参数传递给SQL查询,并检查表中是否存在任何该ID 。它与表格中的列中的表名id相关的ID数组的异或。在SQL查询中执行两个数组的XOR
我无法知道如何做到这一点(数组与列的比较)。你能指出我朝那个方向吗?
我无法使用Java或PL/Sql,因为我的查询将被另一个在运行时处理的团队使用。
我有一个场景,我需要将CSV格式字符串中的'name ids'作为绑定参数传递给SQL查询,并检查表中是否存在任何该ID 。它与表格中的列中的表名id相关的ID数组的异或。在SQL查询中执行两个数组的XOR
我无法知道如何做到这一点(数组与列的比较)。你能指出我朝那个方向吗?
我无法使用Java或PL/Sql,因为我的查询将被另一个在运行时处理的团队使用。
,如果你绑定多个值,而不是单个字符串, 你可以从你的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
:
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...)
你还没有提出过一个问题 – Icarus
编辑了这个问题:) – Himz
编辑了答案:) –