Bonjour je suis sous Oracle 10g.

Je veux faire la comparaison des des données de deux tables.
Ce sont deux tables identiques mais une qui servira d'historique.
La table histotique aura quatre colonnes supplémentaires.

J'ai penser faire une boucle imbriqué afin de lire chaque ligne des deux tables silmutanémment afin de voir s'il y a des différences dans une valeur de colonne des deux tables. Si oui je dois faire un DML.

Est-ce que c'est la bonne façon ou bien il y a de quoi de plus performant?

Merci!!!

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
25
26
27
28
29
30
31
32
33
 
DECLARE
V_DATE_DEBUT_OPER DATE;
 
CURSOR CUR_i_PAYS IS
   SELECT PAYS.CODE_PAYS, PAYS.CODE_REGION_MONDIALE, PAYS.NOM_LONG_PAYS, PAYS.NOM_PAYS
     FROM I_PAYS PAYS;
 
  REC_I_PAYS  CUR_I_PAYS%ROWTYPE;
 
CURSOR CUR_i_PAYS_H IS
   SELECT PAYS.CODE_PAYS, PAYS.CODE_REGION_MONDIALE, PAYS.NOM_LONG_PAYS, PAYS.NOM_PAYS,
               PAYS.NO_VERSION_H, PAYS.HORODATE_AJOUT_H, PAYS.HORODATE_DESACTIVATION_H, PAYS.INDIC_ACTIF_H
     FROM I_PAYS_H PAYS;
 
  REC_I_PAYS_H CUR_I_PAYS_H%ROWTYPE;
 
 
BEGIN
V_DATE_DEBUT_OPER := TRUNC(SYSDATE);
 
FOR REC_I_PAYS IN CUR_I_PAYS LOOP
   FOR REC_I_PAYS_H IN CUR_I_PAYS_H LOOP
    IF REC_I_PAYS_H.INDIC_ACTIF_H = 1 THEN
      IF REC_I_PAYS.CODE_PAYS <>  REC_I_PAYS_H.CODE_PAYS THEN
        UPDATE I_PAYS_H SET HORODATE_DESACTIVATION_H = V_DATE_DEBUT_OPER;
        UPDATE I_PAYS_H SET INDIC_ACTIF_H = 1;
      END IF;
    END IF;
     END LOOP;
 END LOOP;
 
 END;