根据本地文件中的信息从大型数据库表中提取记录子集的选项有哪些?

时间:2018-02-21 21:25:06

标签: python sql oracle pandas cx-oracle

我试图从大型Oracle数据库表中提取一个子集(几千个)记录,其中这些记录的ID在本地文件中指定(并已从中提取)。

由于使用ID的数据集是本地的,因此无法通过连接执行此操作,并且我无权在数据库中创建任何临时表。我需要的记录数量(再次,几千,并且随着时间的推移而增加)似乎太大而无法通过IN子句传递给查询。

对于我可以使用的方法,是否有任何建议,而无需拉入整个表格?

虽然这个问题的措辞更为一般,但如果细节问题很重要,我使用Python中的cx-Oracle库来查询数据库,并且主要使用Pandas DataFrames来处理数据。

1 个答案:

答案 0 :(得分:0)

无法将数据传输到数据库,任何事情都将成为一个愚蠢的解决方案。但是你可以通过嵌套表传递超过1000个元素,并且仍然使用TABLE()运算符引用SQL语句中的那些行,例如

SQL>     set serverout on
SQL> declare
  2    s sys.odcinumberlist := sys.odcinumberlist(1,2,3,4);
  3
  4  begin
  5    for i in
  6      ( select * from table(s) )
  7    loop
  8      dbms_output.put_line(i.column_value);
  9    end loop;
 10  end;
 11  /
1
2
3
4

PL/SQL procedure successfully completed.

SQL>
SQL>
SQL>
SQL> declare
  2    s sys.odcinumberlist := sys.odcinumberlist(1,2,3,4);
  3    c int;
  4  begin
  5    for i in 1 .. dbms_random.value(6000,8000) loop
  6      s.extend;
  7      s(s.count) := i;
  8    end loop;
  9
 10    select count(*) into c from table(s);
 11    dbms_output.put_line('Still fine with '||c||' elements');
 12  end;
 13  /
Still fine with 7429 elements

PL/SQL procedure successfully completed.