Bonjour,
Nous avons un problème avec un trigger.
Nous avons une table qui contient un champ CLOB. Lors de l'insertion dans cette table nous utilisons la méthode empty_clob() pour remplir ce champ (ce champ est donc renseigné après le INSERT via un dbms_lob.Write(...) ). Or nous voudrions créer un trigger qui se place sur les insertions de cette table, et qui modifie un champ de la table au moment de l'insertion en fonction du contenu de ce champ de type CLOB. Le problème est que ce trigger lève une exception Oracle du type :
PS : ce message contient des erreurs liées au code, l'erreur oracle qui nous intéresse est à la 3eme ligne[06/12/2007 11:16:04.615 - 5 ms] {7} <E2BSenderOracle/E2BSenderOracle.cpp:167> Probleme lors de la connection Oracle : Error Code : 22275, Error Message : ORA-22275: invalid LOB locator specified
ORA-04088: error during execution of trigger DIEU_ASIA
ORA-06512: at "TS2EDA", line 6
ORA-06512: at line 1
En effet, lorsque le trigger essaie d'accéder au champ de type CLOB (le champ se nomme 'xml') le champ n'est pas encore renseigné d'où l'erreur.
Avez-vous une idée de comment faire un trigger dans ce cas, ou y-a-t-il une autre solution que nous ne connaissons pas pour modifier un champ d'une table en fonction du contenu d'un autre champ de type CLOB.
Voici ci-dessous la structure du trigger DIEU_ASIA:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE OR REPLACE TRIGGER DIEU_ASIA BEFORE INSERT ON DIEU FOR EACH ROW when (NEW.SYSTEM = 'GL' OR NEW.SYSTEM = 'ORC') BEGIN IF(:NEW.XML LIKE '%<Broker>CDCMTK</Broker>%') THEN :NEW.SYSTEM := :NEW.SYSTEM || 'Asie'; END IF; END; /
la structure de la table DIEU est:
ID VARCHAR2(24) NOT NULL,
SYSTEM VARCHAR2(20) NOT NULL,
XML CLOB NULL,
ISSTREAMED CHAR(1) DEFAULT 0 NULL,
ISDONE CHAR(1) DEFAULT 0 NULL,
DATEINSERT DATE NULL
le package TS2EDA est:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE OR REPLACE PACKAGE RISKV52D.TS2EDA AS function insertExec( n VARCHAR2, sys VARCHAR2) return CLOB; procedure xml2xpath; procedure execStream( id in VARCHAR2, xml in CLOB, sys in VARCHAR2) as language java name 'ts2eda.streaming.ExecStreamer.streamXML(java.lang.String, oracle.sql.CLOB, java.lang.String)'; procedure logError(id in VARCHAR2, sys in VARCHAR2, msg in VARCHAR2); procedure flagExec(eid in VARCHAR2, sys VARCHAR2); procedure flagExecWithValue(eid in VARCHAR2, sys VARCHAR2, flag NUMBER); procedure insertExecInfos (eid in VARCHAR2, sys VARCHAR2); END TS2EDA; /
Partager