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;
Partager