In deze zelfstudie geef ik een voorbeeld om twee databasetabelobjecten met verschillende schema's te vergelijken met behulp van het hulpprogramma DBMS_COMPARISON in Oracle.
Stappen om twee tabelobjecten in Oracle te vergelijken met DBMS_COMPARISON
Stap-1 Maak de vergelijking met DBMS_COMPARISON. In het volgende voorbeeld vergelijkt het de ene tabel uit het SCOTT-schema en één tabel uit het HR-schema in dezelfde database en maakt het een vergelijking met de naam 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; /
Uitvoer:
PL/SQL procedure successfully completed.
Stap-2 Na het uitvoeren van het bovenstaande PL/SQL-blok, zou de vergelijking worden gemaakt. De volgende stap is om deze vergelijking uit te voeren zoals hieronder weergegeven.
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; /
Uitvoer:
Differences found and scan_id is 7 PL/SQL procedure successfully completed.
Stap-3 Als er verschillen zijn gevonden, kunt u de verschillen controleren met de volgende zoekopdracht:
SELECT comparison_name, local_rowid, remote_rowid, status FROM user_comparison_row_dif WHERE comparison_name = 'EMP_COMPARE';
Uitvoer:
COMPARISON_NAME LOCAL_ROWID REMOTE_ROWID STATUS EMP_COMPARE AAAR3sAAEAAAACXAAA AAAU5vAAEAAAAW9AAA DIF EMP_COMPARE AAAR3sAAEAAAACXAAD AAAU5vAAEAAAAW9AAD DIF
U krijgt de uitvoer zoals hierboven weergegeven. Waarin het u de vergelijkingsnaam, de lokale rij-id (scott.emp tabelrij-id), de externe rij-id (hr.emp2 tabelrij-id) en de status laat zien.
Nu kunt u beide tabellen voor deze ROWID's opvragen om de verschillen te controleren.
U kunt ook de gegevens van de twee tabellen uit het verschillende schema vergelijken met behulp van de SQL-query, zoals weergegeven in het onderstaande voorbeeld.
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;
Zie ook:
- Een string splitsen in PL/SQL-voorbeeld
- Extract DDL-statements uit de Oracle DUMP (dmp-bestand)
-
Kolomtelling komt niet overeen met waardetelling in rij 1
-
Verleen privileges voor een bepaalde database in PostgreSQL
-
2 manieren om een database op een gekoppelde server te maken met behulp van T-SQL
-
Fouten:INSERT EXEC-instructie kan niet worden genest. en Kan de ROLLBACK-instructie niet gebruiken in een INSERT-EXEC-instructie. Hoe dit op te lossen?