【发布时间】:2021-11-02 10:17:03
【问题描述】:
我在连接到服务器数据库的客户端计算机上编写查询。 有时我需要加入一些巨大的表,所以我无法一次获得全部输出,我在循环中运行我的查询以获取较小部分的数据(例如每个城市代码),然后聚合数据。 有时查询需要运行几个小时,这会导致查询的执行中断。 我的问题是: 有没有办法在我的查询中将每个部分的结果添加到 csv 文件中,所以如果我的查询中断,我会为剩余部分运行它?
数据库是 oracle,我使用 toad for oracle 来运行我的查询。
这是我的查询的简化形式:
DECLARE
TYPE br_data IS RECORD (brnchcod NUMBER, c100 NUMBER);
TYPE result IS TABLE OF br_data INDEX BY BINARY_INTEGER;
bd br_data;
rs result;
begin
for cur_br in (select a.ABRNCHCOD from Afbranches a)
loop
Select
Br.ABRNCHCOD, Sum(K.CARD100)
INTO bd
From Afbranches Br
Left Join
K
On Br.ABRNCHCOD=K.ABRNCHCOD
where Br.ABRNCHCOD = cur_br.ABRNCHCOD
Group by Br.ABRNCHCOD;
rs(rs.COUNT) := bd;
end loop;
dbms_output.put_line(bd.c100);
end;
【问题讨论】:
-
你需要了解一些东西。如果运行 PLSQL 块,数据库可以创建 csv,但只能在服务器中。 (例如,使用 UTL_FILE )。但是,如果要在客户端创建 csv,则必须更改逻辑并改用 SQL。我会在
sqlplus中使用 shell 脚本应用一些逻辑(每个分支)。它并不复杂,可以从客户端执行
标签: oracle for-loop export-to-csv