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;
我有像
这样的简单查询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;