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:
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é).
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;
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
Partager