Bonjour à tous, voici mon petit souci.
J'ai un trigger (add, update, delete) sur une table qui lance une procedure.
Cette procedure génère un fichier XML contenant le résultat d'une requête.
Cela fonctionne très bien. Mais j'ai fait le test en effectuant une modification (quasi simultanement) sur la table a partir de deux PC. Et la, petit soucis, la première modif a bien gégérer l'XML mais pas la seconde. Je pensé qu'oracle aurait géré cela mais hélas non. Si vous pouvez m'aiguiller sur ce point, se serai sympa. Merci.

Voici le code de la procedure :

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
create or replace PROCEDURE AGG_RESULT_TO_XML AS
BEGIN
 
DECLARE
  XmlFic  Utl_File.File_Type;
  XmlTyp  sys.dbms_xmlquery.ctxType;
  XmlData CLOB;
  Fin     BOOLEAN := TRUE;
 
BEGIN
 
  XmlTyp := sys.dbms_xmlquery.newcontext('SELECT * FROM ma_table ORDER un champ);
 
  -- Spécifie l'encodage
  sys.dbms_xmlquery.setencodingtag(XmlTyp, 'ISO-8859-1');
 
  -- Créer des données au format XML à partir d'une requête :
  XmlData := sys.dbms_xmlquery.getxml(XmlTyp);
 
  sys.dbms_xmlquery.closecontext(XmlTyp);
 
  -- Copie les données au format XML dans un fichier :
  XmlFic := Utl_File.FOpen ('f:\dashboard\out', 'AGGTEST.xml', 'W');
 
  WHILE FIN LOOP
      Utl_File.Put (XmlFic, SUBSTR (XmlData, 1, 32767));
 
      IF LENGTH (XmlData) > 32767 THEN
         XmlData :=  SUBSTR (XmlData, 32768);
      ELSE
         FIN := FALSE;
      END IF;
 
  END LOOP;
 
  Utl_File.FClose (XmlFic);
 
EXCEPTION
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE (SUBSTR (SQLERRM,1,255));
      Utl_File.FClose (XmlFic);
 
END;
 
END AGG_RESULT_TO_XML;