我不知道。我们将我们想要的查询插入到我们内部的企业数据库中,以便用户可以下载他们想要的带有参数的报告。
查询例子
SELECT *
FROM TABLE_A
WHERE name = ?
用户在下载报告时输入参数'abc',系统将问号替换为用户输入的参数
SELECT * FROM TABLE_A WHERE name = 'abc'
但是如果我想让where子句像下面这样,用户输入id列表123,456,789,系统会像下面这样。
WHERE ID in ('123,456,789')
在这种情况下,我怎么做呢?ID不应该是字符串,所以我需要去掉单引号。
WHERE ID in (123,456,789)
请给我一些建议。(我只能更改查询,不能更改后端和前端服务器)
您不需要拆分字符串,使用LIKE
并包含分隔符(因此您匹配整个术语而不是部分匹配):
WHERE ',' || ? || ',' LIKE '%,' || id || ',%'
解析为
REGEXP_SUBSTR('?', '[^,]+', 1, level) AS parts
FROM dual
CONNECT BY REGEXP_SUBSTR('?', '[^,]+', 1, level) IS NOT NULL)