Sql --将XML保存到CLOB字段中 结果:=DBMS_XMLGEN.getXML(qryCtx); 结果:=替换(结果,,“”); 结果:=替换(结果,,“”); 结果:=替换(结果,,“”); --UTL_文件。放置_行(v_文件“”); 当DBMS_XMLGEN.getNumRowsProcessed(qryCtx)=0时退出; --将XML存储到XML文件中 UTL_文件。put_行(v_文件,结果); 端环; UTL_文件。放置_行(v_文件“”); UTL_文件.FCLOSE(v_文件); 终止 如果结束; 终止 在XML1中结束导出;

Sql --将XML保存到CLOB字段中 结果:=DBMS_XMLGEN.getXML(qryCtx); 结果:=替换(结果,,“”); 结果:=替换(结果,,“”); 结果:=替换(结果,,“”); --UTL_文件。放置_行(v_文件“”); 当DBMS_XMLGEN.getNumRowsProcessed(qryCtx)=0时退出; --将XML存储到XML文件中 UTL_文件。put_行(v_文件,结果); 端环; UTL_文件。放置_行(v_文件“”); UTL_文件.FCLOSE(v_文件); 终止 如果结束; 终止 在XML1中结束导出;,sql,xml,oracle,plsqldeveloper,Sql,Xml,Oracle,Plsqldeveloper,对于上述存储过程,将给出结果 <AGNCY> <AGENCYID>01</AGENCYID> <NAME>ABC</NAME> <MARKDELETED>02</MARKDELETED> <AGENCYID>02</AGENCYID> <NAME>Area</NAME> <MARKDELETED>0</MARKDELETED>

对于上述存储过程,将给出结果

<AGNCY>

 <AGENCYID>01</AGENCYID>
 <NAME>ABC</NAME>
 <MARKDELETED>02</MARKDELETED>
 <AGENCYID>02</AGENCYID>
 <NAME>Area</NAME>
 <MARKDELETED>0</MARKDELETED>
 <AGENCYID>03</AGENCYID>
 <NAME>CTSA</NAME>
 <MARKDELETED>0</MARKDELETED>
 <AGENCYID>004</AGENCYID>
 <NAME>Glal</NAME>
 <MARKDELETED>0</MARKDELETED>
-----
-----
-----
</AGNCY>

01
基础知识
02
02
地区
0
03
CTSA
0
004
玻璃
0
-----
-----
-----
我需要下面的输出

要求的输出----------


01
基础知识
02
02
地区
0
-----
-----
-----

如果在生成XML之前使用UTL_FILE.put_行,则会丢失一些表数据。

您可以修改这一行,将默认声明替换为“必需输出”的前两行

result:=REPLACE(结果“,”);
然后添加结束标记

DBMS_LOB.append(result, TO_CLOB('</root>'));
DBMS_LOB.append(result,TO_CLOB(“”));
看起来您的问题不在于XML和DBMS_XMLGET,而在于如何使用CLOB。 因此,这里有一个链接供您参考:

或者问题是您想要的输出也不是格式良好的xml?您没有关闭标记

我会保留原来的答案,即使没有帮助

以下是您的一般代码(我将其替换为“): .10在文件中写入“tablename”

.20清单项目

.30在clob中写入表的行

.40将clob写入文件

.50将“/tablename”写入文件

我发现少了几个步骤: .05写入“”xml。。。归档

.06将“根目录…写入文件”


.55将“/root”写入文件

是否尝试使用XMLSERIALIZE生成具有正确声明的CLOB,然后

SQL> desc DBMS_XSLPROCESSOR
PROCEDURE CLOB2FILE
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
CL                             CLOB                    IN
FLOCATION                      VARCHAR2                IN
FNAME                          VARCHAR2                IN
CSID                           NUMBER                  IN     DEFAULT

你得到了什么?你的输出是什么?你能编辑你的原始问题吗?如果我替换结果:=replace(result),,“”,注释在dipling中不好;从前2行开始,然后每5行重复一次…,我没有得到所需的输出…。我错过了你正在循环5行。但是为什么?如果你得到了所有的表,为什么你需要这个循环?我同意,在循环中,你需要抑制xml版本。
result := REPLACE( result, '<?xml version="1.0"?>',' ');
DBMS_LOB.append(result, TO_CLOB('</root>'));
SQL> desc DBMS_XSLPROCESSOR
PROCEDURE CLOB2FILE
Argument Name                  Type                    In/Out Default?
------------------------------ ----------------------- ------ --------
CL                             CLOB                    IN
FLOCATION                      VARCHAR2                IN
FNAME                          VARCHAR2                IN
CSID                           NUMBER                  IN     DEFAULT