在预言机中的子句限制中



我在 Oracle 中动态形成一个查询,以选择我给出 id 作为输入的数据。 我的查询如下

select * from temp where temp_id in ( :Id);

我的输入 ID 以千为单位,所以我以这样的方式动态创建 in 子句,我的最终查询如下所示

select * 
from temp
where temp_id in (a1,a2,a3,....a999) 
or temp_id in (b1,b2,b3,....b999) or so on ....

我在这里的问题是,即使在那之后,我也得到了太多的值异常。 你能帮帮我吗?

一种方法是使用全局临时表:

CREATE GLOBAL TEMPORARY TABLE my_temp_table (
id           NUMBER
)
ON COMMIT DELETE ROWS;
-- multiple INSERT INTO
select * from temp where temp_id in (SELECT id FROM my_temp_table);
COMMIT;

通过单个请求完成此操作

select * from temp where id in (
select a.letter||b.num from (
select chr(rownum + 96) letter from dual connect by rownum < 3
) a 
join (
select rownum as num from dual connect by rownum < 1000
) b on 1=1
);

您将"rownum <"后面的值替换为您想要的字母数 + 1(数字也是如此)

最新更新