我正在尝试从 plsql 调用网络服务。我有以下代码(有效):
CREATE OR REPLACE PROCEDURE WEBSERVICE AS
v_xml XMLTYPE;
BEGIN
v_xml := XMLTYPE(UTL_HTTP.REQUEST(URL => 'http://dev.markitondemand.com/Api/Quote?symbol=AAPL'));
FOR x IN (SELECT
EXTRACTVALUE(VALUE(p), '/Data/Status/text()') AS title
FROM TABLE(XMLSEQUENCE(EXTRACT(v_xml, '/QuoteApiModel/Data'))) p)
LOOP
DBMS_OUTPUT.PUT_LINE(x.title);
END LOOP;
COMMIT;
END;
但是这段代码不起作用:
CREATE OR REPLACE PROCEDURE WEBSERVICE AS
v_xml XMLTYPE;
BEGIN
v_xml := XMLTYPE(UTL_HTTP.REQUEST(URL => 'http://xkcd.com/rss.xml'));
FOR x IN (SELECT
EXTRACTVALUE(VALUE(p), 'item/title/text()') AS title
FROM TABLE(XMLSEQUENCE(EXTRACT(v_xml, '/rss/channel/item'))) p)
LOOP
DBMS_OUTPUT.PUT_LINE(x.title);
END LOOP;
COMMIT;
END;
它给了我以下错误:
Connecting to the database oracle.
ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00007: unexpected end-of-file encountered
ORA-06512: at "SYS.XMLTYPE", line 310
ORA-06512: at "SYS.WEBSERVICE", line 4
ORA-06512: at line 2
Process exited.
Disconnecting from the database oracle.
我注意到的不同之处在于 xkcd rss 提要有一个 xml 标头,而另一个则没有。我应该怎么做才能完成这项工作?