我有简单的查询,如
SELECT * FROM temp t WHERE t.id IN (:IDs)
执行时,如果ID变量,它会提示我(Oracle SQL Developer)输入值。
当我输入示例169时,一切都运行顺利,但是当我尝试输入多个ID,例如169,170,171时,即使将其放入'',我也会收到错误无效数字。
我习惯使用MS SQL和MySQL,所以这对我来说有点困惑。
任何人有任何建议。
答案 0 :(得分:2)
问题是varying-IN list
。在SQL Developer
中,当系统提示您输入绑定变量的值时,您可以将其简单地传递为169,170,171
,而不将其视为set of values
。
你可以做的是,有多重绑定 -
SELECT * FROM temp t WHERE t.id IN (:ID1, :ID2)
出现提示时,输入每个绑定的值。
更新好的,如果上面的解决方案看起来很难看,那么我更倾向于以下解决方案 -
WITH DATA AS
(SELECT to_number(trim(regexp_substr(:ids, '[^,]+', 1, LEVEL))) ids
FROM dual
CONNECT BY instr(:ids, ',', 1, LEVEL - 1) > 0
)
SELECT * FROM temp t WHERE it.d IN
(SELECT ids FROM data
)
/
答案 1 :(得分:0)
如果你把它们放进“,就会出错.Oracle不接受”。你应该只用数字而不是“。 即:(169,170,171,...)
答案 2 :(得分:0)
您可以将替换变量定义为数组,如下所示:
define IDS = (169,170,171);
然后像这样使用它:
SELECT * FROM temp t WHERE t.id IN &IDS;