Bonjour tout le monde
Je cherche à créer deux bases de données(DBMIAGE et DBXP) contenant des tables communes dont les données doivent etre identiques.
J'ai d'abord créer des liens dans les deux sens :
-de dbmiage à dbxp
create database link dbxp connect to truc identified by truc using 'dbxp';
-de dbxp à dbmiage
create database link dbmiage connect to truc identified by truc using 'dbmiage';
J'ai ensuite utiliser lancer des triggers dans les deux bases je vous mets celle de dbmiage ->dbxp)
create or replace trigger tr_copie_usine
after insert or update or delete on "usine"
For each row
begin
if inserting then
insert into "usine"@dbxp values
(:new."numero_usine",
:new."adresse_usine" );
elsif updating then
update "usine"@dbxp set
"adresse_usine"=:new."adresse_usine"
where "numero_usine"=:new."numero_usine";
elsif deleting then
Delete from "usine"@dbxp
where "numero_usine"=:old."numero_usine";
else raise_application_error
(-20001, 'erreur declencheur tr_copie_usineDBMIAGE');
end if;
End;
/
Le probleme c'est que ca crée des conflits car elles se modifieraient en permanence.
Donc j'ai rajouter des conditions pour essayer d'eviter cela :
create or replace trigger tr_copie_usine
after insert or update or delete on "usine"
For each row
begin
if inserting then
(when not exists
(select "numero_usine"
from "usine"@dbxp O
where O."numero_usine"=:new."numero_usine" )
then insert into "usine"@dbxp values
(:new."numero_usine",
:new."adresse_usine" ));
elsif updating then
(when not exists
(select "numero_usine" ,"adresse_usine"
from "usine"@dbxp O
where O."numero_usine"=:new."numero_usine"
and O."adresse_usine"=:new."adresse_usine" )
then update "usine"@dbxp set
"adresse_usine"=:new."adresse_usine"
where "numero_usine"=:new."numero_usine" );
elsif deleting then
(when exists
(select "numero_usine"
from "usine"@dbxp O
where O."numero_usine"=:new."numero_usine" )
then Delete from "usine"@dbxp
where "numero_usine"=:old."numero_usine" );
else raise_application_error
(-20001, 'erreur declencheur tr_copie_usineDBMIAGE');
end if;
End;
/
Mais cela ne marche pas car ce n'est pas la bonne syntaxe.
Donc est ce que qu'elle pourrait m'indiquer la syntaxe exacte ou me proposer une autre solution a base de trigger?
Merci d'avance
Message édité par ippat le 29-06-2008 à 12:29:58