gpt4 book ai didi

Oracle 中的 SQL 参数限制

转载 作者:行者123 更新时间:2023-12-04 10:58:59 27 4
gpt4 key购买 nike

Oracle SQL 中似乎有 1000 个参数的限制。我在生成查询时遇到了这个问题,例如......

select * from orders where user_id IN(large list of ids over 1000)

我的解决方法是创建一个临时表,首先将用户 id 插入其中,而不是通过 JDBC 发出查询,该查询在 IN 中有一个巨大的参数列表。

有人知道更简单的解决方法吗?由于我们使用的是 Hibernate,我想知道它是否能够自动透明地执行类似的解决方法。

最佳答案

另一种方法是将数组传递给数据库并使用 TABLE() IN 子句中的函数。这可能比临时表性能更好。它肯定会比运行多个查询更有效。但是,如果您有大量 session 执行这些操作,则需要监视 PGA 内存使用情况。另外,我不确定将它连接到 Hibernate 有多么容易。

注:TABLE()函数在 SQL 引擎中运行,因此它们需要我们声明一个 SQL 类型。

create or replace type tags_nt as table of varchar2(10);
/

以下示例使用几千个随机标签填充数组。然后它在查询的 IN 子句中使用该数组。
declare
search_tags tags_nt;
n pls_integer;
begin

select name
bulk collect into search_tags
from ( select name
from temp_tags
order by dbms_random.value )
where rownum <= 2000;

select count(*)
into n
from big_table
where name in ( select * from table (search_tags) );

dbms_output.put_line('tags match '||n||' rows!');
end;
/

关于Oracle 中的 SQL 参数限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1943284/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com