Oracle, как экспортировать запрос в текстовый / CSV-файл - PullRequest
6 голосов
/ 13 мая 2009

Мне было интересно, как экспортировать запрос из PL / SQL в текстовый файл или файл csv. Запрос, который я имею в виду, экспортирует огромное количество данных (около 1 гигабайта). Поэтому мне бы хотелось, чтобы данные распределялись по нескольким файлам;

out1.csv out2.csv out3.csv

Я бы хотел решить, на сколько файлов его разбить.

Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

8 голосов
/ 13 мая 2009

Использование UTL_FILE .

Хорошо известное (вероятно, наиболее полное обсуждение этой темы) обсуждение этого вопроса можно найти в Ask Tom, Здесь , обратите внимание, что многие примеры там относятся к оракулу 8, так что быть лучшими способами сделать это в вашей версии Oracle.

0 голосов
/ 27 апреля 2018

Попробуйте это

Для создания MYDIR

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

Предоставить все разрешения MYDIR через пользователя SYS выполнить эту процедуру

 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;
...