我想知道如何将查询从PL / SQL导出到文本文件或csv文件。我想到的查询导出了大量数据(约1 gig)。所以我也希望将数据分成多个文件;
out1.csv out2.csv out3.csv
我希望能够决定将其拆分的文件数量。
任何人都知道如何做到这一点?
答案 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;