Oracle
 sql >> Database >  >> RDS >> Oracle

Come confrontare due oggetti di database in Oracle?

In questo tutorial, fornisco un esempio per confrontare due oggetti tabella di database di schemi diversi utilizzando il pacchetto di utilità DBMS_COMPARISON in Oracle.

Passaggi per confrontare due oggetti tabella in Oracle utilizzando DBMS_COMPARISON

Passaggio 1 Crea il confronto utilizzando DBMS_COMPARISON. Nell'esempio seguente, confronterà una tabella dello schema SCOTT e una tabella dello schema HR nello stesso database e creerà un confronto denominato 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;
/

Uscita:

PL/SQL procedure successfully completed.

Passaggio 2 Dopo aver eseguito il blocco PL/SQL sopra, verrà creato il confronto. Il passaggio successivo consiste nell'eseguire questo confronto come mostrato di seguito.

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;
/

Uscita:

Differences found and scan_id is 7
PL/SQL procedure successfully completed.

Fase 3 Se sono state trovate differenze, è possibile verificare le differenze tramite la seguente query:

SELECT comparison_name,
local_rowid,
remote_rowid,
status
FROM user_comparison_row_dif
WHERE comparison_name = 'EMP_COMPARE';

Uscita:

COMPARISON_NAME    LOCAL_ROWID              REMOTE_ROWID         STATUS
EMP_COMPARE        AAAR3sAAEAAAACXAAA       AAAU5vAAEAAAAW9AAA   DIF
EMP_COMPARE        AAAR3sAAEAAAACXAAD       AAAU5vAAEAAAAW9AAD   DIF

Otterrai l'output come mostrato sopra. In cui ti mostrerà il nome del confronto, l'id della riga locale (id della riga della tabella scott.emp), l'id della riga remota (id della riga della tabella hr.emp2) e lo stato.

Ora puoi interrogare entrambe le tabelle per questi ROWID per verificare le differenze.

Puoi anche confrontare i dati delle due tabelle dal diverso schema utilizzando la query SQL, come mostrato nell'esempio seguente.

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;

Vedi anche:

  • Dividi una stringa nell'esempio PL/SQL
  • Estrai le istruzioni DDL da Oracle DUMP (file dmp)