我试图从大型Oracle数据库表中提取一个子集(几千个)记录,其中这些记录的ID在本地文件中指定(并已从中提取)。
由于使用ID的数据集是本地的,因此无法通过连接执行此操作,并且我无权在数据库中创建任何临时表。我需要的记录数量(再次,几千,并且随着时间的推移而增加)似乎太大而无法通过IN子句传递给查询。
对于我可以使用的方法,是否有任何建议,而无需拉入整个表格?
虽然这个问题的措辞更为一般,但如果细节问题很重要,我使用Python中的cx-Oracle库来查询数据库,并且主要使用Pandas DataFrames来处理数据。
答案 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.