sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo comparar dos objetos de base de datos en Oracle?

En este tutorial, doy un ejemplo para comparar dos objetos de tabla de base de datos de diferentes esquemas utilizando el paquete de utilidades DBMS_COMPARISON en Oracle.

Pasos para comparar dos objetos de tabla en Oracle utilizando DBMS_COMPARISON

Paso-1 Cree la comparación utilizando DBMS_COMPARISON. En el siguiente ejemplo, comparará una tabla del esquema SCOTT y una tabla del esquema HR en la misma base de datos y creará una comparación denominada 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;
/

Salida:

PL/SQL procedure successfully completed.

Paso 2 Después de ejecutar el bloque PL/SQL anterior, se crearía la comparación. El siguiente paso es ejecutar esta comparación como se muestra a continuación.

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

Salida:

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

Paso 3 Si se encuentran diferencias, puede verificar las diferencias mediante la siguiente consulta:

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

Salida:

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

Obtendrá la salida como se muestra arriba. En el que le mostrará el nombre de comparación, la identificación de la fila local (identificación de la fila de la tabla scott.emp), la identificación de la fila remota (identificación de la fila de la tabla hr.emp2) y el estado.

Ahora puede consultar ambas tablas para estos ROWID para comprobar las diferencias.

También puede comparar los datos de las dos tablas de diferentes esquemas utilizando la consulta SQL, como se muestra en el siguiente ejemplo.

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;

Ver también:

  • Dividir una cadena en el ejemplo de PL/SQL
  • Extraiga declaraciones DDL de Oracle DUMP (archivo dmp)