使用see在Oracle中选择长参数列表

时间:2011-12-20 14:22:33

标签: database oracle

我有一个很长的选择列表,用于oracle db中的select in子句,它给出了一个错误说明

  

SP2-0027:输入太长(> 2499个字符) - 忽略行

有没有更好的方法来获取这些数据?

我的查询是这样的

select * from clicks where click_id in( ''comma seperated list '');

逗号分隔列表类似于('1','2','3','4'.....)

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');