Sql Oracle:迭代表并为每个行名称打印一个xml文件

Sql Oracle:迭代表并为每个行名称打印一个xml文件,sql,oracle,Sql,Oracle,例如,我创建了一个表,其中每行中都有一个id号,但它不是连续的1,2,4,6,7。现在,我想为每个数字创建一个XML文件,其中还包含某些其他数据,但这些数据对于问题并不重要 我现在的问题是,如何设置这个for循环来逐个提取数字并将其传输到我的PL-SQL?我需要在导出后在表中写入导出日期。谢谢你的帮助 桌子 id|订单|出口日期 这是我的xml文件代码,现在我需要一个id_订单号循环: declare fhandle utl_file.file_type; -- Output Variabl

例如,我创建了一个表,其中每行中都有一个id号,但它不是连续的1,2,4,6,7。现在,我想为每个数字创建一个XML文件,其中还包含某些其他数据,但这些数据对于问题并不重要

我现在的问题是,如何设置这个for循环来逐个提取数字并将其传输到我的PL-SQL?我需要在导出后在表中写入导出日期。谢谢你的帮助

桌子 id|订单|出口日期

这是我的xml文件代码,现在我需要一个id_订单号循环:

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

如果目的是简单地将每一行的“ID”值作为XML返回,那么应该查看SQLXML函数

在您的情况下,请尝试以下方法:

从表中选择XMLFORESTid

它可以轻松处理多个列:

从表中选择XMLFORESTid、col2、col3

要在“数据”元素之间嵌套此元素,请执行以下操作:

从表中选择XMLELEMENT数据、XMLFORESTid

总而言之:

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大小大于32K,则需要将文件分块写入。您可以使用光标创建循环

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

使用光标进行循环。