6

我想知道如何将查询从 PL/SQL 导出到文本文件或 csv 文件。我想到的查询会导出大量数据(大约 1 gig)。因此,我还希望将数据拆分为多个文件;

out1.csv out2.csv out3.csv

我希望能够决定要拆分多少个文件。

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

4

2 回答 2

8

使用UTL_FILE

一个众所周知的(可能是关于这个主题的最完整的讨论)讨论可以在 Ask Tom, Here找到,请注意那里的许多示例都可以追溯到 oracle 8,因此在您的版本中可能有更好的方法来做到这一点甲骨文。

于 2009-05-13T12:46:55.183 回答
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;
于 2018-04-27T09:47:55.973 回答