Bonjour,
Dans un environnement 9i,je voudrais créer un trigger qui permet d'alimenter un champs BLOB par un contenu xml après son insertion dans un champ de type XMLType pour cette raison dans ma base.
Ma table :
La fonction qui permet de transférer un champ CLOB en BLOB:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 create table SYNCRODV.t_xml ( transid number not null, data blob , xml_data XMLTYPE);
Le trigger qui permet d'alimenter le blob dès que le champ xml est inséré dans la même ligne :
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 CREATE OR REPLACE FUNCTION SYNCRODV.c2b( c IN CLOB ) RETURN BLOB -- typecasts CLOB to BLOB (binary conversion) IS pos PLS_INTEGER := 1; buffer RAW( 32767 ); res BLOB; lob_len PLS_INTEGER := DBMS_LOB.getLength( c ); BEGIN DBMS_LOB.createTemporary( res, TRUE ); DBMS_LOB.OPEN( res, DBMS_LOB.LOB_ReadWrite ); LOOP buffer := UTL_RAW.cast_to_raw( DBMS_LOB.SUBSTR( c, 16000, pos ) ); IF UTL_RAW.LENGTH( buffer ) > 0 THEN DBMS_LOB.writeAppend( res, UTL_RAW.LENGTH( buffer ), buffer ); END IF; pos := pos + 16000; EXIT WHEN pos > lob_len; END LOOP; RETURN res; -- res is OPEN here END c2b; /
Mais lorsque je simule une insertion dans ma table exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 CREATE TRIGGER SYNCRODV.TRIG_XML_BLOB after insert on SYNCRODV.t_xml for each row declare begin UPDATE SYNCRODV.t_xml t SET data=syncrodv.c2B(:new.xml_data.getClobVal()); end;
Il me donne toujours le message suivant :
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 INSERT INTO SYNCRODV.t_xml (transid,xml_data) VALUES (1, XMLTYPE.CREATEXML('<?xml version="1.0" encoding="ISO-8859-1"?> <compagnie> <comp>AC</comp> <pilotes> <pilote brevet="PL-3"> <nom>G. Diffis</nom> <salaire>5000</salaire> </pilote> <pilote brevet="PL-4"> <nom>S. Lacombe</nom> </pilote> </pilotes> <nomComp>Castanet Lines</nomComp> </compagnie>') ); commit;
Je suis bloqué merci de votre aide.Error at line 1
ORA-04091: table SYNCRODV.T_XML en mutation, déclencheur/fonction ne peut la voir
ORA-06512: à "SYNCRODV.TRIG_XML_BLOB", ligne 4
ORA-04088: erreur lors d'exécution du déclencheur 'SYNCRODV.TRIG_XML_BLOB'
Partager