今天白天很郁闷 , Production又出现了一个问题. 本来好好的周末就这么被破坏了
系统JDBC跑出来个SQL异常:
最后才发现,大家在用IN条件语句的时候可能用忽略一种情况
比较说:
我们需要更新,把10个Merchant的Status变成'A'.
IN clause里面有10个List Items, Merchant_id分别1,2,3,4,5,6,7,8,9,10
从1到10,这个SQL Statement是没有问题 从1到1000也是没有问题
但是一但超过1000个的话, 以上的异常就是出来
最土最土的解决方法可能就是:
这效率却不是很高
不知道大家还有什么高见没, 这几天我们的DBA跟老婆孩子跑去台湾度假,所以没有请教他有没有更加合理的建议
系统JDBC跑出来个SQL异常:
SQLException: ORA
-
01795
: maximum
number
of
expressions
in
a list
is
1000
最后才发现,大家在用IN条件语句的时候可能用忽略一种情况
比较说:
UPDATE
MERCHANT_ID
SET
STATUS
=
'
A
'
WHERE
MERCHANT_ID
IN
(
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
);
IN clause里面有10个List Items, Merchant_id分别1,2,3,4,5,6,7,8,9,10
从1到10,这个SQL Statement是没有问题 从1到1000也是没有问题
UPDATE
MERCHANT_ID
SET
STATUS
=
'
A
'
WHERE
MERCHANT_ID
IN
(
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
......
999
,
1000
,
1001
);
最土最土的解决方法可能就是:
UPDATE
MERCHANT_ID
SET
STATUS
=
'
A
'
WHERE
MERCHANT_ID
IN
(
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
......
999
,
1000
)
OR MERCHANT_ID IN ( 1001 , 1002 , 1003 ..... 1999 , 2000 )
OR MERCHANT_ID IN ( 2001 , 2002 , 2003 ..... 2999 , 3000 );
OR MERCHANT_ID IN ( 1001 , 1002 , 1003 ..... 1999 , 2000 )
OR MERCHANT_ID IN ( 2001 , 2002 , 2003 ..... 2999 , 3000 );
不知道大家还有什么高见没, 这几天我们的DBA跟老婆孩子跑去台湾度假,所以没有请教他有没有更加合理的建议