V tomto tutoriálu uvádím příklad pro porovnání dvou objektů databázových tabulek různých schémat pomocí obslužného balíčku DBMS_COMPARISON v Oracle.
Kroky k porovnání dvou tabulkových objektů v Oracle pomocí DBMS_COMPARISON
Krok 1 Vytvořte srovnání pomocí DBMS_COMPARISON. V následujícím příkladu porovná jednu tabulku ze schématu SCOTT a jednu tabulku ze schématu HR ve stejné databázi a vytvoří srovnání s názvem emp_compare .
BEGINDBMS_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;/
Výstup:
Procedura PL/SQL byla úspěšně dokončena.
Krok-2 Po provedení výše uvedeného PL/SQL bloku by se vytvořilo porovnání. Dalším krokem je spustit toto porovnání, jak je uvedeno níže.
SET SERVEROUTPUT ONDECLAREt_scan_info DBMS_COMPARISON.comparison_type;l_diff BOOLEAN;BEGINl_diff :=DBMS_COMPARISON.compare (comparison_name => 'emp_compare ',scan_info => t_scan_info,perform_row_dif => TRUE);POKUD NE l_diff THENDBMS_OUTPUT.put_line('Nalezené rozdíly a scan_id je ' || t_scan_info.scan_id);ELSEDBMS_OUTPUT.put_line(END'Nebyly nalezeny žádné rozdíly;END;/
Výstup:
Nalezeny rozdíly a scan_id je 7PL/SQL procedura úspěšně dokončena.
Krok 3 Pokud byly nalezeny rozdíly, můžete je zkontrolovat pomocí následujícího dotazu:
SELECT Compare_name,local_rowid,remote_rowid,statusFROM user_comparison_row_difWHERE Compare_name ='EMP_COMPARE ';
Výstup:
COMPARISON_NAME LOCAL_ROWID REMOTE_ROWID STATUS EMP_COMPARE AAAR3sAAEAAAACXAAA AAAU5vAAEAAAAW9AAA DIFEMP_COMPARE AAAR3sAAEAAAACXAAD AAAU5vAAEAAAAW9AAD DIFZískáte výstup, jak je uvedeno výše. Ve kterém se zobrazí název porovnání, ID místního řádku (id řádku tabulky scott.emp), ID vzdáleného řádku (id řádku tabulky hr.emp2) a stav.
Nyní se můžete dotazovat na tyto ROWID v obou tabulkách a zkontrolovat rozdíly.
Můžete také porovnat data dvou tabulek z různých schémat pomocí dotazu SQL, jak je uvedeno v příkladu níže.
SELECT EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNOFROM scott.empMINUS SELECT EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNOFROM hr.emp2;
Viz také:
- Rozdělit řetězec v příkladu PL/SQL
- Extrahujte příkazy DDL z Oracle DUMP (soubor dmp)