ORACLE 在 IN 语句中替换变量

ORACLE substitute variable in IN statement

我有像

这样的简单查询
SELECT * FROM temp t WHERE t.id IN (:IDs)

执行时,它会提示我(Oracle SQL 开发人员)输入 ID 变量的值。

当我输入例如 169 时,一切运行顺利,但是当我尝试输入多个 ID(例如 169,170,171)时,即使将其放入 '' 中,我也会收到错误 Invalid Number。

我习惯于使用 MS SQL 和 MySQL,所以这让我有点困惑。

任何人有任何建议。

如果将它们放入 ",则会出现错误。Oracle 不接受 "。你应该只使用没有“的数字。 即:(169,170,171,...)

问题是varying-IN list。在 SQL Developer 中,当系统提示您输入绑定变量的值时,您只需将其作为 169,170,171 传递,而不会将其视为 set of values.

你可以做的是,有多个绑定 -

SELECT * FROM temp t WHERE t.id IN (:ID1, :ID2)

出现提示时,为每个绑定输入值。

UPDATE 好吧,如果上面的解决方案看起来很丑,那么我更喜欢下面的解决方案 -

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

您可以像这样将替换变量定义为数组:

define IDS = (169,170,171);

然后像这样使用它:

SELECT * FROM temp t WHERE t.id IN &IDS;