如何扩展Oracle列表中的表达式的最大数量?

11 浏览
0 Comments

如何扩展Oracle列表中的表达式的最大数量?

我正在使用一个IN子句,它需要在这些不按顺序排列的ID集合中搜索ID,这意味着它来自不同的条件。如何解决这个问题?

SELECT DISTINCT ID FROM "projeck"."mytable" "t" WHERE staffID IN (75953,196262,196387,133585,195639,196702,195790,195820,192903,145383,179603,175896,176554,43545,154843,183798,195767,195715,等等..等等..等等..)

我得到了这个Oracle错误

General error: 1795 OCIStmtExecute: ORA-01795: 列表中的表达式数量达到了最大值1000

0
0 Comments

在Oracle中,当我们在一个列表中包含大量的表达式时,可能会遇到表达式数目超过最大限制的问题。这个问题的出现通常有以下两个原因:

1. 直接引用生成这些值的函数:首先,我们可以尝试直接引用生成这些值的函数。通过这种方式,我们可以避免将大量表达式写在列表中,从而绕过了最大表达式数目的限制。

2. 将值加载到全局临时表并进行连接:如果这些值被多个查询使用,并且计算这些值的成本较高,我们可以考虑将这些值加载到一个全局临时表中,并在查询中通过连接来使用这些值。通过这种方式,我们可以避免在列表中写入大量表达式,从而绕过了最大表达式数目的限制。

以下是一个示例代码,演示了将值加载到全局临时表并进行连接的方法:

-- 创建一个全局临时表
CREATE GLOBAL TEMPORARY TABLE temp_values (
  value NUMBER
) ON COMMIT PRESERVE ROWS;
-- 向临时表中插入需要使用的值
INSERT INTO temp_values VALUES (1);
INSERT INTO temp_values VALUES (2);
INSERT INTO temp_values VALUES (3);
-- 使用临时表中的值进行连接
SELECT t1.column1, t2.column2
FROM table1 t1
JOIN temp_values t2 ON t1.column1 = t2.value;

通过以上方法,我们可以解决在列表中包含大量表达式时超过最大限制的问题。

0