考虑一下查询(它同时在Oracle和MySQL上运行)
UPDATE table1 SET something_id = CASE WHEN table1_id = 1446 THEN 423 WHEN table1_id = 2372 THEN 426 WHEN table1_id = 2402 THEN 428 WHEN table1_id = 2637 THEN 429 WHEN table1_id = 2859 THEN 430 WHEN table1_id = 3659 THEN 433 END WHERE table1_id IN (1446,2372,2402,2637,2859,3659)
该查询可能会变得很大,所以我想知道单个查询可以容纳的条件数(WHEN,THEN语句)的限制是多少。有办法解决吗?
例如: 我知道可以传递的最大值IN是1000,为了克服这个问题,我们可以做
IN
`WHERE TABLE1_ID IN ([1000 values]) OR TABLE1_ID IN ([more values])`
10gR2的文档说:
CASE表达式中的最大参数数为255。所有表达式都计入此限制,包括简单CASE表达式的初始表达式和可选的ELSE表达式。每个WHEN … THEN对均视为两个参数。为避免超出此限制,可以嵌套CASE表达式,以便return_expr本身是CASE表达式。