oracle – SQLPlus – 从PL / SQL块假脱机到多个文件
发布时间:2020-12-12 13:50:19 所属栏目:百科 来源:网络整理
导读:我有一个查询,将大量数据返回到CSV文件.事实上,Excel无法打开它 – 行数太多了.有没有办法在每次处理65000行时控制线轴到新文件的线轴?理想情况下,我希望将输出放在按顺序命名的文件中,例如large_data_1.csv,large_data_2.csv,large_data_3.csv等… 我可以
我有一个查询,将大量数据返回到CSV文件.事实上,Excel无法打开它 – 行数太多了.有没有办法在每次处理65000行时控制线轴到新文件的线轴?理想情况下,我希望将输出放在按顺序命名的文件中,例如large_data_1.csv,large_data_2.csv,large_data_3.csv等…
我可以在PL / SQL块中使用dbms_output来控制输出的行数,但是我如何切换文件,因为从PL / SQL块似乎无法访问spool? (Oracle 10g) 更新: 我无法访问服务器,因此将文件写入服务器可能无法正常工作. 更新2: 有些字段包含自由格式文本,包括换行符,因此在写入文件后计算换行符并不像在返回数据时计算记录一样简单… 得到了解决方案,不知道为什么我没想到这个…基本思想是主sqplplus脚本生成一个中间脚本,将输出拆分为多个文件.执行中间脚本将执行对rownum施加不同范围的多个查询,并为每个查询假脱机到不同的文件. set termout off set serveroutput on set echo off set feedback off variable v_rowCount number; spool intermediate_file.sql declare i number := 0; v_fileNum number := 1; v_range_start number := 1; v_range_end number := 1; k_max_rows constant number := 65536; begin dbms_output.enable(10000); select count(*) into :v_err_count from ... /* You don't need to see the details of the query... */ while i <= :v_err_count loop v_range_start := i+1; if v_range_start <= :v_err_count then i := i+k_max_rows; v_range_end := i; dbms_output.put_line('set colsep,set pagesize 0 set trimspool on set headsep off set feedback off set echo off set termout off set linesize 4000 spool large_data_file_'||v_fileNum||'.csv select data_string from (select rownum rn,data_object from /* Details of query omitted */ ) where rn >= '||v_range_start||' and rn <= '||v_range_end||'; spool off'); v_fileNum := v_fileNum +1; end if; end loop; end; / spool off prompt executing intermediate file @intermediate_file.sql; set serveroutput off (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |