Gestion de bases de données

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();