Bonjour
je desirerai faire une insertion dans la table de données distante lorsque l'objet modifié dans ma table local , n'y existe pas , sinon ( s'il existe ) je le met a jour, voila mon trigger , je ne sais pas ou ca déconne
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
CREATE OR REPLACE TRIGGER trigger_codeb AFTER UPDATE OR INSERT ON SUPPORTE FOR
EACH ROW
DECLARE
sub_id VARCHAR(30);
existe
INTEGER:=0;
BEGIN
sub_id:=trouve_id_personne(:new.id_carte);
select count(*)
into existe from asynchrone@exportSynchrone where codebar= :old.codebar ;
if
(sub_id IS NOT NULL) then
if ( existe > 0) then
update
asynchrone@exportSynchrone set  codebar= :new.codebar  where codebar =
:old.codebar ;
else
insert into asynchrone@exportSynchrone
(codebar,id_personne,diffphoto) values (:new.codebar
,substr(sub_id,1,(length(sub_id)-12)) ,'N');
COMMIT;
end if;
end if;
 END ;
avec
ma fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
CREATE OR REPLACE FUNCTION trouve_id_personne(id_c VARCHAR2)
RETURN varchar2 IS 
id_p varchar(20);
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
select id_personne into id_p from porteur, supporte where porteur.id_carte=supporte.id_carte  and porteur.id_carte= id_c;
RETURN id_p;
Exception
When NO_DATA_FOUND Then RETURN NULL;
END