I denne øvelse giver jeg et eksempel til at sammenligne to databasetabelobjekter med forskellige skemaer ved hjælp af hjælpepakken DBMS_COMPARISON i Oracle.
Trin til at sammenligne to tabelobjekter i Oracle ved hjælp af DBMS_COMPARISON
Trin-1 Opret sammenligningen ved hjælp af DBMS_COMPARISON. I det følgende eksempel vil den sammenligne den ene tabel fra SCOTT-skemaet og en tabel fra HR-skemaet i den samme database og vil skabe en sammenligning med navnet 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; /
Output:
PL/SQL procedure successfully completed.
Trin-2 Efter at have udført ovenstående PL/SQL-blok, ville sammenligningen blive oprettet. Det næste trin er at køre denne sammenligning som vist nedenfor.
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; /
Output:
Differences found and scan_id is 7 PL/SQL procedure successfully completed.
Trin-3 Hvis der er fundet forskelle, kan du kontrollere forskellene med følgende forespørgsel:
SELECT comparison_name, local_rowid, remote_rowid, status FROM user_comparison_row_dif WHERE comparison_name = 'EMP_COMPARE';
Output:
COMPARISON_NAME LOCAL_ROWID REMOTE_ROWID STATUS EMP_COMPARE AAAR3sAAEAAAACXAAA AAAU5vAAEAAAAW9AAA DIF EMP_COMPARE AAAR3sAAEAAAACXAAD AAAU5vAAEAAAAW9AAD DIF
Du får output som vist ovenfor. I hvilken den vil vise dig sammenligningsnavnet, det lokale række-id (scott.emp-tabelrække-id), fjernrække-id (hr.emp2-tabelrække-id) og status.
Nu kan du forespørge i begge tabeller for disse ROWID'er for at kontrollere forskellene.
Du kan også sammenligne de to tabeldata fra det forskellige skema ved hjælp af SQL-forespørgslen, som vist i eksemplet nedenfor.
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;
Se også:
- Opdel en streng i PL/SQL-eksempel
- Udtræk DDL-erklæringer fra Oracle DUMP (dmp-fil)