Bonjour messieurs,

Voici une procedure qui me permet d'insérer le contenu d'un fichier XML dans une table mais lorsque ce fichier est vide (pas de données) il me déclenche une erreur "ORA-29532: Java call terminated by uncaught Java exception: oracle.xml.sql.OracleXMLSQLException: No rows to modify -- the row enclosing tag missing. Specify the correct row enclosing tag."

Y'a t'il d'après vous un autre moyen de "trapper" cette erreur autre que de la tester complétement sur le SQLERRM ou de le tester en amont peut être ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
PROCEDURE INSERT_XML(P_Fichier IN VARCHAR2) IS
    LXML_FILE        CLOB;
    LCTX_CTX         DBMS_XMLSave.CTXType;
    LFIC_Fichier     BFILE := BFILENAME('DIRIMPORT', r'||P_Fichier||'.xml');
    LINT_Rows        INT;
    LINT_vdest       INT := 1;
    LINT_VSRC        INT := 1;
    LINT_vWarn       INT;
    LINT_vLang       INT := 0;
  BEGIN
    IF DBMS_LOB.FILEEXISTS(LFIC_Fichier)<>0 THEN
      DBMS_LOB.FILEOPEN(LFIC_Fichier);
      DBMS_LOB.OPEN( LFIC_Fichier );
      DBMS_LOB.CREATETEMPORARY( LXML_FILE, TRUE, DBMS_LOB.SESSION );
      DBMS_LOB.LOADCLOBFROMFILE ( LXML_FILE, LFIC_Fichier,DBMS_LOB.LOBMAXSIZE,
        LINT_vdest,LINT_vsrc,0,LINT_vLang,LINT_vWarn); 
      DBMS_LOB.CLOSE( LFIC_Fichier );
      LCTX_CTX := DBMS_XMLSave.newContext(P_Fichier); 
      DBMS_XMLSAVE.SETDATEFORMAT(LCTX_CTX,'dd/MM/yyyy');
      LINT_Rows:=DBMS_XMLSave.insertXML(LCTX_CTX,LXML_FILE); 
      DBMS_XMLSave.closeContext(LCTX_CTX); 
    END IF;
  EXCEPTION WHEN OTHERS THEN
    DBMS_XMLSave.closeContext(LCTX_CTX); 
    IF SQLERRM<>'ORA-29532: Java call terminated by uncaught Java exception: oracle.xml.sql.OracleXMLSQLException: No rows to modify -- the row enclosing tag missing.  Specify the correct row enclosing tag.' THEN
   -- Je met à jour mon log ...
    END IF;
  END;
Je précise que le ORA-29532 est commun à d'autres messages d'erreurs que je veux traiter ... Donc je ne peux pas me baser sur le SQLCODE.