我有一个很长的选择列表,用于oracle db中的select in子句,它给出了一个错误说明
SP2-0027:输入太长(> 2499个字符) - 忽略行
有没有更好的方法来获取这些数据?
我的查询是这样的
select * from clicks where click_id in( ''comma seperated list '');
逗号分隔列表类似于('1','2','3','4'.....)
答案 0 :(得分:2)
拆分列表。如,
select * from clicks
where click_id in ('1','2','3','4')
or click_id in ('5','6','7','8');
等
答案 1 :(得分:1)
用子查询替换“逗号分隔列表”:
select * from clicks where click_id in( SELECT click_id ...);
答案 2 :(得分:1)
用逗号分隔的列表替换SubSELECT语句。
WHERE click_id IN ( SELECT id FROM the_interesting_clicks WHERE ... )
[ORACLE]对于这种情况,您可能需要GLOBAL TEMPORARY TABLE
:它们的内容是事务或会话的本地内容(取决于您声明表的方式)。因此:使用您多次调用的准备好的INSERT
语句加载该临时表,然后使用子选择。
答案 3 :(得分:1)
这是SQL * Plus的错误,而不是SQL。只需在字符2500之前的某处添加换行符。或者在不同的环境中执行该语句,例如SQL Developer。
与@John Doyle建议的类似,尽管您不需要使用单独的条件:
select * from clicks
where click_id in ('1','2','3','4',
'5','6','7','8');