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