Oracle: перебрать таблицу и распечатать файл xml для каждого имени строки - PullRequest
0 голосов
/ 03 марта 2020

Я создал таблицу, в которой, например, есть номер идентификатора в каждой строке, но он не является непрерывным (1,2,4,6,7). Теперь я хочу создать файл XML для каждого числа, который также содержит некоторые другие данные, но которые не важны для вопроса.

Теперь у меня вопрос, как мне настроить это для l * 1010? * вытащить номер один за другим и перенести его на мой PL SQL? И мне нужно записать дату экспорта в таблицу после экспорта. Спасибо за вашу помощь.

Таблица id_order | дата экспорта

Это мой код для файлов xml, и теперь мне нужно al oop для номера id_order:

declare
fhandle  utl_file.file_type;

-- Output Variablen
output_intro varchar2(23000);

ID_order NUMBER := 1;
filename varchar2(100) := 'test.xml';

-- Intro
BEGIN
fhandle := utl_file.fopen('EXPORT', filename , 'w');
begin
    SELECT 
    '<"ID">'|| ID ||'</ID>' || CHR(10)

    into output_intro FROM Table
    WHERE ID = ID_order;
    exception
      when others THEN
          output_intro := 'Issue Intro';
end;

BEGIN
    utl_file.put(fhandle, output_intro);
END;

utl_file.fclose(fhandle);
exception
when others then
  dbms_output.put_line('ERROR: ' || SQLCODE
                    || ' - ' || SQLERRM);
  raise;
end;
/

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Вы можете использовать курсор, чтобы создать все oop

-- Declare a cursor
Cursor Cur is select * from YourTable where YourCondition;
Row_ Cur%rowtype;

begin
    -- Open the cursor
    Open Cur;

    -- Loop over the cursor rows
    loop 
        -- Fetch every into the object Row_
        fetch cur into Row_;

        -- Exit when no rows found
        exit when Cur%notfound;

        -- Perform the export to a file here
        --You can access Row_ columns by appending columns to Row_. For example : Row_.FirstName
    end loop;
    Close Cur;
end;
0 голосов
/ 03 марта 2020

Если цель состоит в том, чтобы просто вернуть значение 'ID' для каждой строки как XML, вам следует взглянуть на функции SQLXML.

В вашем случае попробуйте следующее:

SELECT XMLFOREST(id) FROM table

Он легко обрабатывает несколько столбцов:

SELECT XMLFOREST(id, col2, col3,) FROM table

Чтобы вложить это между элементом данных:

SELECT XMLELEMENT( "Data", XMLFOREST(id) ) FROM table

Собираем все вместе:

DECLARE
   l_file UTL_FILE.FILE_TYPE;
   l_xmltype XMLType;
BEGIN
   SELECT XMLELEMENT( "Data", XMLFOREST(id) )
   INTO   l_xmltype 
   FROM table;
   l_file := UTL_FILE.fopen ('EXPORT', 'output.xml', 'w');
   UTL_FILE.PUT_LINE(l_file , l_xmltype.getStringVal( ));
   UTL_FILE.fclose (l_file);
END;
/

Обратите внимание: если размер XML превышает 32 КБ, вам нужно записать файл в виде кусков.

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