1

我有一个过程,它创建一个文件,其中包含从游标返回的尽可能多的记录。由于下游文件大小问题,我想将每个文件限制为 ~500k(n) 条记录(从参数表中得出的值)。如果游标中有超过 500k(n) 条记录,则应创建一个具有较新时间戳的新文件。该过程使用以下步骤。

set v_date = to_char(SYSDATE, 'YYYYMMDDHH24MISS');
set new_file_name = 'new_file_'|| v_date
  open record cursor
  loop
    fetch bulk collect with 1000 record limit
    for loop
      write records to file
    end loop
    clear cache
  close cursor loop

在投票之前,如果您需要更多信息,请发表评论。我正在寻找最简单的解决方案以及最有效的解决方案。

4

1 回答 1

3

你需要三个循环。外循环管理每个文件,中间循环获取记录,内循环写入记录。所以,调整你的伪代码......

open record cursor    
loop

    fetch bulk collect with 1000 record limit
    exit when 0

    record_count := 0;
    utl_file.fopen(dir, 'new_file_'||to_char(SYSDATE, 'YYYYMMDDHH24MISS'), 'W');

    loop

        for loop
             write records to file
        end loop

        record_count := record_count + 1000;
        if record_count = 50000 then exit;

        fetch bulk collect with 1000 record limit
        exit when 0

    end loop

    close file

end loop;
close record cursor;
于 2019-12-19T03:28:26.513 回答