Bonjour à tous,

J'ai une instance de base Oracle de production qui contient toutes mes données de production (schéma PRODUCTION) et une instance de base infocentre qui contient tous mes indicateurs calculés et historisés (schéma INFOCENTRE). Cette dernière a un dblink vers la base de production DBPROD_LNK.

Pour calculer les indicateurs à partir des données de production puis les mettre à jour dans l'infocentre, je passe par une table temporaire TB_TEMP avant de stocker le résutat définitif dans la table TB_RESULT.

Voici le code correspondant:
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
 
-- 1. création d'une table temporaire pour utiliser le merge (db_link interdit)
DROP TABLE infocentre.tb_temp;
CREATE TABLE infocentre.tb_temp AS 
   SELECT * FROM infocentre.tb_result WHERE 1=0;
 
-- 2. ajout des indicateurs dans la table temporaire
INSERT INTO infocentre.tb_temp (annee,mois,indic1,indic2,datecalcul) SELECT annee,mois,sum(valeur1),count(valeur2),sysdate
FROM production.tb_donnees@dbprod_lnk
GROUP BY annee,mois; 
 
-- 3. mise à jour des indicateurs à partir de la table temp
MERGE INTO infocentre.tb_result TbResult
 USING (SELECT annee, mois, indic1, indic2, datecalcul     
   FROM infocentre.tb_temp) TbTemp 
 ON (TbResult.annee = TbTemp.annee AND TbResult.mois = TbTemp.mois)
WHEN MATCHED THEN
 UPDATE SET TbResult.indic1 = TbTemp.indic1, 
   TbResult.indic2 = TbTemp.indic2, 
   TbResult.sysdate = TbTemp.sysdate;
 
-- 4. suppression de la table temporaire (db_link interdit le merge...)
DROP TABLE infocentre.tb_temp;
La 1ère requête me permet de tester l'existence préalable de la table temporaire à créer (précaution si l'exécution précédente du script a planté).
Elle me renvoie une erreur car normalement cette table n'existe pas déjà dans le schéma INFOCENTRE.

Mes questions sont les suivantes :
1. comment faire pour tester l'existence préalable d'une table et soit la créer si elle n'existe pas soit faire un truncate si elle existe avec la même structure soit encore faire un drop si elle existe mais avec une structure différente ?

2. avez-vous une autre solution pour faire un merge entre des instances Oracle différentes ?

Merci beaucoup à tous pour votre aide précieuse,
MarieO