用PLSQL解析xml文件
Posted
技术标签:
【中文标题】用PLSQL解析xml文件【英文标题】:parsing xml file with PLSQL 【发布时间】:2017-12-14 13:52:47 【问题描述】:我在解析 PLSQL 中的一个 xml 文件时遇到问题。我想说我对其他一些 xml 文件的代码没有问题,尤其是这个。 所以我正在等待一些导致我应该在这个 xml 文件中查看导致问题的线索。
这是 PLSQL 中的代码:
filename := 'name_of_my_file.xml';
myParser := DBMS_XMLPARSER.newParser;
ficContent := DBMS_XSLPROCESSOR.Read2Clob(directoryWhereToFindTheFile, filename , '0');
这是出现问题的那一行:
DBMS_XMLPARSER.parseBuffer(myParser,ficContent);
Oracle 错误:
ORA-06502 : PL/SQL : numeric or value error
知道我应该看什么吗?
注意:我想我应该添加其他内容。
这个特定的 xml 文件只写了两行(这会导致 Read2Clob 出现一些问题,行太长)。所以我在 IDE 中将其格式化为一个好的 xml 文件,我使用了这个。读取文件没有问题了,但是发生了这个错误。
【问题讨论】:
“工作”和“不工作”的 XML 样本会有很大帮助。 内容相同,只是“不工作”的有2行,“工作”的每行有一个节点。(格式化) 我认为你应该首先使用PARSECLOB
,而不是PARSEBUFFER
,这可能是你的问题。在当前情况下,您正在解析 VARCHAR2,在“工作”XML 的情况下,它可能低于 VARCHAR2(4k 或 32k,取决于)的大小限制,而在另一种情况下 - 它只是超过了它,因为你'无论如何都要传递一个 CLOB,它会隐式转换为 VARCHAR2。
你的东西有效!把它作为我可以验证的答案,向我解释什么时候应该使用 parsebuffer 和 parseclob。
【参考方案1】:
在您的 XML 文件中,在 XML 代码之后写入以下代码行 -
<...XML code...>
BEGIN
FOR r IN (
SELECT ExtractValue(Value(p),'/row/name/text()') as clo1
,ExtractValue(Value(p),'/row/Address/State/text()') as col2
,ExtractValue(Value(p),'/row/Address/City/text()') as col3
FROM TABLE(XMLSequence(Extract(x,'/person/row'))) p
) LOOP
-- do whatever you want
END LOOP;
END;
【讨论】:
【参考方案2】:按照问题下方的cmets:
您的代码如下所示:
filename := 'name_of_my_file.xml';
myParser := DBMS_XMLPARSER.newParser;
ficContent := DBMS_XSLPROCESSOR.Read2Clob(directoryWhereToFindTheFile, filename , '0');
DBMS_XMLPARSER.parseBuffer(myParser,ficContent);
对于DBMS_XSLPROCESSOR.Read2Clob
[LINK]的规范:
语法
DBMS_XSLPROCESSOR.READ2CLOB(
flocation IN VARCHAR2,
fname IN VARCHAR2,
csid IN NUMBER:=0)
RETURN CLOB;
另一方面,DBMS_XMLPARSER.parseBuffer
接受 VARCHAR2
作为第二个参数,并且您在那里传递了一个 CLOB
,这没关系(它被隐式转换为 VARCHAR2
),只要它适合大小VARCHAR2
的个数(范围从 4k
到 32k
,以字节为单位,具体取决于您的数据库版本和配置)。
现在CLOB
的大小为4 GB - 1
(4 Giga Bytes - 1),比最大的VARCHAR2
大得多。
因此,显然这解决了问题。
关于何时使用parseBuffer
或parseClob
- 我想你明白了。我猜想,parseClob
调用(内部)parseBuffer
的每个部分 4k
字节从它接收的 CLOB
中分离出来,但这只是一个猜测(我无法想象他们使用不同的同一件事的代码,但是,嘿,它发生在遗留的东西上:-))。
干杯
【讨论】:
以上是关于用PLSQL解析xml文件的主要内容,如果未能解决你的问题,请参考以下文章