Oracle如何将查询导出到text / csv文件

时间:2009-05-13 12:44:50

标签: oracle plsql csv export text-files

我想知道如何将查询从PL / SQL导出到文本文件或csv文件。我想到的查询导出了大量数据(约1 gig)。所以我也希望将数据分成多个文件;

out1.csv out2.csv out3.csv

我希望能够决定将其拆分的文件数量。

任何人都知道如何做到这一点?

2 个答案:

答案 0 :(得分:8)

使用UTL_FILE

可以在Ask Tom,Here找到一个众所周知的(可能是关于这个主题的最完整的讨论)讨论,注意那里的许多例子可以追溯到oracle 8,所以可能会有更好的在您的Oracle版本中执行此操作的方法。

答案 1 :(得分:0)

试试这个

创建MYDIR

create or replace directory MYDIR as 'F:/DATA/';

通过 SYS 用户授予对 MYDIR 的所有权限 执行此程序

 CREATE OR REPLACE PROCEDURE export_to_csv(refcur out sys_refcursor) IS
      v_file   UTL_FILE.file_type;
      v_string VARCHAR2(4000);
      CURSOR c_emp IS
        SELECT ROLE_ID, ROLE_DESC FROM role_mst;
    BEGIN
      open refcur for
        SELECT ROLE_ID, ROLE_DESC FROM role_mst;
      v_file := UTL_FILE.fopen('MYDIR', 'empdata.csv', 'w', 1000);       
      -- if you do not want heading then remove below two lines
      v_string := 'Emp Code, Emp Name';
      UTL_FILE.put_line(v_file, v_string);
      FOR cur IN c_emp LOOP
        v_string := cur.ROLE_ID || ',' || cur.ROLE_DESC;
        UTL_FILE.put_line(v_file, v_string);
      END LOOP;
      UTL_FILE.fclose(v_file);
    EXCEPTION
      WHEN OTHERS THEN
        dbms_output.put_line(sqlerrm);
        IF UTL_FILE.is_open(v_file) THEN
          UTL_FILE.fclose(v_file);
        END IF;
    END;