Database Link et Procedure
Bonjour à tous,
Je suis en train de développer un système de synchronisation bidirectionnel entre 2 bases de données (situé sur le même serveur). Cela concerne une seule table.
Voici la procédure qui pose problème :
Code:
1 2 3 4 5 6 7 8 9 10 11
| CREATE OR REPLACE PROCEDURE synch_hydrant_ins(id IN NUMBER)
IS
user_name VARCHAR2(100);
BEGIN
SELECT SYS_CONTEXT('USERENV', 'SESSION_USER') INTO user_name FROM DUAL;
IF user_name<>'SYNCH' THEN
INSERT INTO HYDRANT (SELECT * FROM HYDRANT@WEBLK WHERE CARTO_REF = id);
END IF;
COMMIT;
END;
/ |
Voici le DATABASE LINK :
Code:
CREATE DATABASE LINK WEBLK CONNECT TO SYNCH IDENTIFIED BY ** USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = *********)(PORT = 1521)))(CONNECT_DATA = (SERVICE_NAME = ********)))';
L'erreur à lieu à la création de la procédure, le message est le suivant :
Code:
1 2 3 4
| LINE/COL ERROR
-------- -----------------------------------------------------------------
8/3 PL/SQL: SQL Statement ignored
8/38 PL/SQL: ORA-00942: table or view does not exist |
Ce que je ne comprend pas c'est que la requête suivante fonctionne correctement : :weird:
Code:
INSERT INTO HYDRANT (SELECT * FROM HYDRANT@WEBLK WHERE CARTO_REF = [n'importe quoi]);
Compléments d'informations sur le contexte :
Je check le nom d'utilisateur pour éviter les boucles infinies (trigger BDD1 -> procédure BDD2 -> trigger BDD2 -> procédure BDD1 -> trigger BDD1...).
L'utilisateur utilise un compte SCOOT pour faire les modification ce qui qui déclenche le trigger. Le fait de créé la DATABASE LINK avec l'utilisateur SYNCH casse la boucle au niveau des procédures.
Voici le trigger de la BDD1 qui fait appelle à la procédure de la BDD2 (qui pose problème) :
Code:
1 2 3 4 5 6 7
| CREATE OR REPLACE
TRIGGER T_INSERT_HYDRANT
AFTER INSERT ON HYDRANT FOR EACH ROW
BEGIN
synch_hydrant_ins@APPLK(:new.CARTO_REF);
END;
/ |
Lors d'une insertion la nouvelle donnée est également ajouté à la BDD2
Les UPDATE et DELETE sont également géré. Les procédures et triggers sont présent sur les 2 BDD (synchro bidirectionnel).
Merci de ne pas souligner le peu d'intérêt de la réplication de 2 BDD qui sont sur le même disque dur ce choix ne m'appartient pas :roll:
Merci d'avance! :D