Dans ce didacticiel, je donne un exemple pour comparer deux objets de table de base de données de schémas différents à l'aide du package utilitaire DBMS_COMPARISON dans Oracle.
Étapes pour comparer deux objets de table dans Oracle à l'aide de DBMS_COMPARISON
Étape 1 Créez la comparaison à l'aide de DBMS_COMPARISON. Dans l'exemple suivant, il comparera une table du schéma SCOTT et une table du schéma HR dans la même base de données et créera une comparaison nommée emp_compare .
BEGIN DBMS_COMPARISON.create_comparison ( comparison_name => 'emp_compare', schema_name => 'scott', object_name => 'emp', dblink_name => NULL, remote_schema_name => 'hr', remote_object_name => 'emp2'); END; /
Sortie :
PL/SQL procedure successfully completed.
Étape 2 Après avoir exécuté le bloc PL/SQL ci-dessus, la comparaison serait créée. L'étape suivante consiste à exécuter cette comparaison comme indiqué ci-dessous.
SET SERVEROUTPUT ON DECLARE t_scan_info DBMS_COMPARISON.comparison_type; l_diff BOOLEAN; BEGIN l_diff := DBMS_COMPARISON.compare ( comparison_name => 'emp_compare', scan_info => t_scan_info, perform_row_dif => TRUE ); IF NOT l_diff THEN DBMS_OUTPUT.put_line('Differences found and scan_id is ' || t_scan_info.scan_id); ELSE DBMS_OUTPUT.put_line('No differences found.'); END IF; END; /
Sortie :
Differences found and scan_id is 7 PL/SQL procedure successfully completed.
Étape 3 Si des différences sont trouvées, vous pouvez vérifier les différences à l'aide de la requête suivante :
SELECT comparison_name, local_rowid, remote_rowid, status FROM user_comparison_row_dif WHERE comparison_name = 'EMP_COMPARE';
Sortie :
COMPARISON_NAME LOCAL_ROWID REMOTE_ROWID STATUS EMP_COMPARE AAAR3sAAEAAAACXAAA AAAU5vAAEAAAAW9AAA DIF EMP_COMPARE AAAR3sAAEAAAACXAAD AAAU5vAAEAAAAW9AAD DIF
Vous obtiendrez la sortie comme indiqué ci-dessus. Dans lequel il vous montrera le nom de la comparaison, l'identifiant de la ligne locale (identifiant de la ligne de la table scott.emp), l'identifiant de la ligne distante (identifiant de la ligne de la table hr.emp2) et le statut.
Vous pouvez maintenant interroger les deux tables pour ces ROWID afin de vérifier les différences.
Vous pouvez également comparer les données des deux tables des différents schémas à l'aide de la requête SQL, comme illustré dans l'exemple ci-dessous.
SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO FROM scott.emp MINUS SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO FROM hr.emp2;
Voir aussi :
- Fractionner une chaîne dans un exemple PL/SQL
- Extraire les instructions DDL du DUMP Oracle (fichier dmp)
-
Agrégation de chaînes au fil des ans dans SQL Server
-
Utilisation de la navigation au clavier uniquement dans Word, Excel et PowerPoint (Partie 1 :Le ruban)
-
Application de liste de tâches utilisant la base de données PHP et MySQL
-
Journée mondiale de la sauvegarde :comment et quand sauvegarder votre base de données ?