如何从文件中读取输入并在sqlplus查询中使用它?

时间:2014-08-18 12:35:11

标签: python shell sqlplus

我正在尝试像

这样的东西
   select customer_id, order_id from order_table where purchase_id = 10 OR 
   purchase_id = 25 OR 
   ...
   purchase_id = 25432;

由于查询太大,我遇到了各种各样的问题...如果我在一行中运行整个查询,我遇到了错误:

SP2-0027: Input is too long (> 2499 characters) - line ignored

如果将查询拆分为多行,则由于干扰了为输入查询的每一行打印的行号,查询会被破坏。如果我禁用行号,SQL>每条线路上的提示让我很烦恼。

如果从文本文件SQL> @query.sql运行查询,则会出现相同的错误 (我过去没有遇到mysql的问题,但现在使用sqlplus)。

我不是shell脚本的专家,也不是python的专家。如果我可以获得有关如何将所有purchase_id放入文本文件,每行一个purchase_id并在脚本运行时将其提供给 sqlplus 查询的指示,将会有很大的帮助。

我做了足够的研究,但我仍然很欣赏指针。

2 个答案:

答案 0 :(得分:1)

1)语法更改

尝试使用'(10,25,2542,...)'而不是一系列的' OR'它可以减小sql语句的大小

2)逻辑变化

语法可能会延迟不可避免的,但如果要排除很多id,仍会发生异常。

2a)的

直接修复是将查询分解为批次。您可以按照50个购买ID发出选择查询,直到涵盖所有ID。

2b)的

或者您可以查看更通用的方法来检索相同的查询结果。让我们假设您真正想要看到的是未确认订单的列表'。然后,您可以添加一个布尔字段来确认'而不是在where子句中使用一组购买ID。到order_table并根据此标准进行选择。

答案 1 :(得分:1)

另一个想法:

创建一个表" query_ids" (一列)并输入order_id子句中的所有WHERE

新查询将是:

select customer_id, order_id from order_table where purchase_id = ( select * from query_ids);