Erreur ORA-31011 XML parsing failed
S'APPLIQUE À : Oracle Database Enterprise Edition 11.2.0.4 et plus
Oracle Database - Enterprise Edition - Version 11.2.0.4 et ultérieures
Les informations de ce document s'appliquent à toutes les plateformes.
SYMPTÔMES : analyse XML, ORA-31011
Lors d'une tentative d'analyse (parsing) XML,
l'erreur suivante se produit.
ERROR
-----------------------
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Error processing input</faultstring>
<detail>
<OracleErrors xmlns="http://xmlns.oracle.com/orawsv/faults">
<OracleError>
<ErrorNumber>ORA-31011</ErrorNumber>
<Message>
<![CDATA[ XML parsing failed ]]>
</Message>
</OracleError>
</OracleErrors>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
CAUSE : XMLTYPE, service Web
Le fait qu'une fonction ait XMLTYPE comme type de retour pose problème lorsque la fonction est appelée par un service Web
create or replace procedure serpt.PTCL_DLVRY(TELENO IN VARCHAR2,
P_DOUT OUT xmltype) is
BEGIN
SELECT XMLFOREST(consignmentno,
bkg_date,
telephoneno,
customerid,
accountid,
exchangecode,
exchangename,
orgn,
dstn,
received_by,
delivery_date,
dlvry_tim,
status,
X.RECEIVER_MOBILE,
RECEIVER_RELATION,
NEAREST_LANDMARK,
UPDATED_ADDRESS,
RESERVE_1,
RESERVE_2,
RESERVE_3,
RESERVE_4) into l_xmltype
FROM SE.ptcl_dlvry_data_vu X
where x.telephoneno = TELENO;
exception
when no_data_found then
null;
end PTCL_DLVRY;
SOLUTION
Changez son type de retour en CLOB et ajoutez la conversion suivante à la fin de la fonction : RETURN return_xml.getClobVal();