sqlplus,在SELECT的长列表中输入太长时间

时间:2014-09-23 10:07:57

标签: oracle shell unix sqlplus

我有一个包含表中5000个记录列表的文件。

示例:id_list.txt

('12345', '23456', '34567', ..., '65432')

我想在Linux中使用以下命令选择记录:

id_list=`cat id_list.txt`
sqlplus -s user/password@server <<END
    select company_name, company_status, count(*)
    from printing_request
    where request_id in ${id_list}
    group by company_name, company_status;
END

为了解释,表printing_request是许多公司可以发送许多打印文档请求的地方。如果请求已完成,其状态将从I更改为C

我希望输出是这样的

company_name | company_status | count
AA           | I              | 1000
AA           | C              | 1234
BB           | I              | 2334
...

但我收到了错误Input is too long (> 2499 characters)

我只能想到的非解决方案是将id_list拆分为多个列表并循环选择多次。但是当我想到它必须执行多少循环以及我将如何在此之后手动进行分组和计数之后,我放弃了这个解决方案。

2 个答案:

答案 0 :(得分:1)

如果您遇到“输入列表太长”,则肯定不会手动输入ID。它们必须是从其他东西推断出来的,并且可能这个“其他东西”已经存在于您的数据库中。考虑到这一点,请尝试重新考虑您的选择。

如果不是,并且ID从其他地方神奇地到达,那么你必须将它们放入他们自己的表中。如果文件格式一致,则可以使用Justin Cave指出的外部表。

这些ID如何首先进入文件?谁把它们放在那里,她不能马上把它放进数据库吗?它会解决你所有的问题。

答案 1 :(得分:0)

1)创建ID列为

的全局临时表

2)从SQLPlus

为此表生成5000个插入语句

3)修改您的查询以加入此表