Сбрасывать поля CLOB в файлы? - PullRequest
       65

Сбрасывать поля CLOB в файлы?

4 голосов
/ 05 сентября 2011

Допустим, у вас есть таблица:

Column_name | data_type
Title       | Varchar2
Text        | CLOB

с несколькими строками:

SomeUnkownMovie | A long time ago in a galaxy far, far away....(long text ahead)
FredMercuryBio  | Awesomeness and stuff....(more long text)

Можно ли как-то запросить, чтобы она выводила файлы типа

SomeUnkownMovie.txt
FredMercuryBio.txt

(и, конечно, с соответствующими текстами внутри)

Я считаю, что это должен быть достаточно простой сценарий sqlplus ... хотя я не тот: (

спасибо!

Ответы [ 2 ]

11 голосов
/ 03 сентября 2014

Этот код pl / sql должен работать в Oracle 11g.Он выводит текст сгустков в каталог с заголовком в качестве имени файла.

begin 
  for rec in (select title, text from mytable)
  loop DBMS_XSLPROCESSOR.clob2file(rec.text, 'DUMP_SOURCES', rec.title ||'.txt'); end loop;
end;

Если DBMS_XSLPROCESSOR недоступен, вы можете заменить файл DBMS_XSLPROCESSOR.clob2file процедурой, использующей UTL_FILE,Например:

CREATE OR REPLACE PROCEDURE CLOB2FILE (
    clob_in IN CLOB,
    directory_name IN VARCHAR2,
    file_name IN VARCHAR2
)
IS
    file_handle UTL_FILE.FILE_TYPE;
    clob_part VARCHAR2(1024);
    clob_length NUMBER;
    offset NUMBER := 1;
BEGIN
    clob_length := LENGTH(clob_in);
    file_handle := UTL_FILE.FOPEN(directory_name, file_name, 'W');

    LOOP
        EXIT WHEN offset >= clob_length;
        clob_part := DBMS_LOB.SUBSTR (clob_in, 1024, offset);
        UTL_FILE.PUT(file_handle, clob_part);
        offset := offset + 1024;
    END LOOP;

    UTL_FILE.FFLUSH(file_handle);
    UTL_FILE.FCLOSE(file_handle);

EXCEPTION
    WHEN OTHERS THEN
        UTL_FILE.FCLOSE(file_handle);
        RAISE;

END;

Или, возможно, заменить файл DBMS_XSLPROCESSOR.clob2file на dbms_advisor.create_file.

5 голосов
/ 06 сентября 2011

Вы пытаетесь создать файлы в файловой системе сервера базы данных? Или в клиентской файловой системе?

Если вы пытаетесь сгенерировать файлы в файловой системе сервера базы данных, есть пример экспорта CLOB в файл в другом потоке StackOverflow, основанном на примерах экспорта LOB Тима Холла (сайт Тима сейчас недоступен).

Если вы пытаетесь сгенерировать файлы в файловой системе клиента, это потребует гораздо более сложных сценариев SQL Plus. Вы бы хотели сделать что-то вроде запроса таблицы и использования данных для динамической генерации одного сценария SQL Plus на файл, который вы хотите сгенерировать, и затем динамического вызова этих сценариев. Вы бы действительно использовали возможности сценариев SQL * Plus, поэтому я бы не рекомендовал эту архитектуру, но я верю, что это возможно.

Если вам нужно сгенерировать файлы в файловой системе клиента, я бы предпочел использовать что-то отличное от SQL Plus. Например, есть пример небольшого Java-класса , который считывает и записывает данные CLOB и BLOB в файлы на сайте AskTom и из них *. Я хотел бы написать небольшую утилиту Java, которая запускалась на клиенте и экспортировала данные, вместо того, чтобы пытаться поместить слишком много логики в сценарии SQL Plus.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...