oracle - ORA-01795: 列表中的最大表达式数为 1000 perl 脚本中的错误
问题描述
我正在尝试使用 NOT IN 子句运行查询,例如:
SELECT * FROM table WHERE column NOT IN (?,?,...) (>1000 items)
我得到 ORA-01795: maximum number of expressions in a list is 1000 错误。
在我的脚本中,我正在做类似的事情:
my $lparam = join ', ' => ('?') x @ids;
$lquery = "SELECT * FROM table WHERE column NOT IN ($lparam)";
$lcsr = $zdb->prepare($lquery);
$lcsr->execute( @ids );
我想将 NOT IN 子句拆分为where (A not in (a,b,c) AND A not in (d,e,f)) ...
我们如何实现这一点?
解决方案
给你,添加三元组并计算它们。
my $count = 0;
$lquery = "SELECT * FROM table WHERE (A ";
while (@ids -$count > 3) {
$lquery .= "NOT in (?, ?, ?) AND A ";
$count += 3;
}
my $lparam = join ', ' => ('?') x (@ids - $count);
$lquery .= "NOT IN ($lparam))";
推荐阅读
- bash - 如何将字符串附加到 Bash 目录中所有文件的所有行?
- c# - Unrecognized option '--useSqlite'
- java - 如何使用 Java Comparator 按字符串中的最后一个字符排序?
- javascript - 如何在本地 gatsby web 应用程序中配置 http2
- html - 底部设计中的描述不能同线同高元素
- hadoop - 试图将字符串转换为数组
使用 collect_set 输入 hive - ios - 带有 actionBlock 的宏会导致编译器错误
- java - 使用两个 Spinner 过滤 Firestore 数据库到 RecyclerView
- matlab - 找到索引后标记数据块
- javascript - 如何在谷歌图表中从顶部开始 y 轴点