从web解析XML文件时出现PL/SQL错误LPX-00249
我正在用PL/SQL编写一个程序,用于从internet下载XML文件,解析它们并将值存储在Oracle数据库中。我有一个大型XML文件,其中包含大量小型XML的链接。大约有6253个文件需要解析。我有一个函数,它将XML文件下载到CLOB中,并将数据保存到XmlType中。此值将返回到程序中并进行进一步处理。这是函数:从web解析XML文件时出现PL/SQL错误LPX-00249,sql,xml,oracle,plsql,xml-parsing,Sql,Xml,Oracle,Plsql,Xml Parsing,我正在用PL/SQL编写一个程序,用于从internet下载XML文件,解析它们并将值存储在Oracle数据库中。我有一个大型XML文件,其中包含大量小型XML的链接。大约有6253个文件需要解析。我有一个函数,它将XML文件下载到CLOB中,并将数据保存到XmlType中。此值将返回到程序中并进行进一步处理。这是函数: create or replace function get_xml_by_url ( v_url VARCHAR2 ) RETURN XMLType AS req
create or replace function get_xml_by_url
( v_url VARCHAR2
)
RETURN XMLType
AS
req SYS.UTL_HTTP.REQ;
resp SYS.UTL_HTTP.RESP;
xmlClob CLOB;
x XmlType;
l_offset number := 1;
value VARCHAR2(3999); -- URL to post to
BEGIN
BEGIN
UTL_HTTP.SET_PROXY('http://10.1.250.233:8080');
req := UTL_HTTP.BEGIN_REQUEST (url=> v_url, method => 'GET');
UTL_HTTP.SET_HEADER(req, 'User-Agent', 'Mozilla/4.0');
UTL_HTTP.SET_HEADER
( r => req
, name => 'Content-Type'
, value => 'text/xml;charset=UTF-8'
);
resp := UTL_HTTP.GET_RESPONSE(req);
DBMS_LOB.CREATETEMPORARY(xmlClob, true);
-- Loading first line
UTL_HTTP.READ_LINE(resp,value,false);
DBMS_LOB.WRITE(xmlClob,length(value),l_offset,value);
l_offset := l_offset + length(value);
-- Loading and adjusting second line
UTL_HTTP.READ_LINE(resp,value,true);
value := rtrim(value,'xmlns="http://seznam.gov.cz/ovm/datafile/seznamovm/v1">')||'>';
DBMS_LOB.WRITE(xmlClob, length(value), l_offset,value);
l_offset := l_offset + length(value);
-- Filling CLOB
LOOP
UTL_HTTP.READ_LINE(resp,value,false);
DBMS_LOB.WRITE(xmlClob,length(value),l_offset,value);
l_offset := l_offset + length(value);
END LOOP;
EXCEPTION
when UTL_HTTP.END_OF_BODY
then
UTL_HTTP.END_RESPONSE(resp);
when others
then
utl_http.end_response(resp);
END;
x := XMLType.createXML(xmlClob);
DBMS_LOB.FREETEMPORARY(xmlClob);
RETURN x;
END;
我在一个循环中为所有6.253XML文件调用这个函数,每次都有错误,但每次都是在不同的文件中,当我只为引发错误的一个XMl文件再次运行脚本时,它运行良好。我认为问题在于记忆,但我不知道它发生在哪里,为什么发生。我收到以下错误:
Error report:
ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00249: invalid external ID declaration
Error at line 1
ORA-06512: in "SYS.XMLTYPE", line 5
ORA-06512: in "GET_XML_BY_URL", line 47
ORA-06512: in line 29
31011. 00000 - "XML parsing failed"
*Cause: XML parser returned an error while trying to parse the document.
*Action: Check if the document to be parsed is valid.
GET_XML_BY_URL是给定给所描述函数的名称。有人遇到过这种问题吗?致以最诚挚的问候,Michal您是否尝试将dbms_lob.createtemporary()的缓存参数设置为false?您认为这有帮助吗?我认为clob需要它,它在函数结束时被释放。45秒后,LPX-00007出现错误。我还有一组XML文件,它只有140个文件。对于此集合,程序运行良好。代码示例中缺少某些内容。请加上。请同时添加复制问题的XML文件。根据我的经验,这可能是namespace/DTD的问题。