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