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)
-
¿Cómo realizar la declaración IF en SQL?
-
11 mejores prácticas de índices de SQL Server para mejorar el ajuste del rendimiento
-
Configure los grupos de disponibilidad Always ON de SQL Server entre dos réplicas sincrónicas. Parte 2
-
Cómo usar Ordenar (Ordenar por) en la instrucción Select en SQL Server - Tutorial de SQL Server/TSQL Parte 109