In diesem Tutorial gebe ich ein Beispiel zum Vergleichen von zwei Datenbanktabellenobjekten unterschiedlicher Schemas mit dem Hilfspaket DBMS_COMPARISON in Oracle.
Schritte zum Vergleichen zweier Tabellenobjekte in Oracle mit DBMS_COMPARISON
Schritt 1 Erstellen Sie den Vergleich mit DBMS_COMPARISON. Im folgenden Beispiel vergleicht es die eine Tabelle aus dem SCOTT-Schema und eine Tabelle aus dem HR-Schema in derselben Datenbank und erstellt einen Vergleich namens 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; /
Ausgabe:
PL/SQL procedure successfully completed.
Schritt 2 Nach dem Ausführen des obigen PL/SQL-Blocks würde der Vergleich erstellt werden. Der nächste Schritt besteht darin, diesen Vergleich wie unten gezeigt durchzuführen.
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; /
Ausgabe:
Differences found and scan_id is 7 PL/SQL procedure successfully completed.
Schritt 3 Wenn Unterschiede gefunden werden, können Sie die Unterschiede durch die folgende Abfrage überprüfen:
SELECT comparison_name, local_rowid, remote_rowid, status FROM user_comparison_row_dif WHERE comparison_name = 'EMP_COMPARE';
Ausgabe:
COMPARISON_NAME LOCAL_ROWID REMOTE_ROWID STATUS EMP_COMPARE AAAR3sAAEAAAACXAAA AAAU5vAAEAAAAW9AAA DIF EMP_COMPARE AAAR3sAAEAAAACXAAD AAAU5vAAEAAAAW9AAD DIF
Sie erhalten die Ausgabe wie oben gezeigt. Darin werden Ihnen der Vergleichsname, die lokale Zeilen-ID (scott.emp-Tabellenzeilen-ID), die entfernte Zeilen-ID (hr.emp2-Tabellenzeilen-ID) und der Status angezeigt.
Jetzt können Sie beide Tabellen nach diesen ROWIDs abfragen, um die Unterschiede zu überprüfen.
Sie können auch die Daten der beiden Tabellen aus den unterschiedlichen Schemas mithilfe der SQL-Abfrage vergleichen, wie im folgenden Beispiel gezeigt.
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;
Siehe auch:
- Teilen Sie einen String in einem PL/SQL-Beispiel auf
- Extrahieren Sie DDL-Anweisungen aus dem Oracle-DUMP (dmp-Datei)