В този урок давам пример за сравняване на два обекта на таблици на база данни с различни схеми с помощта на пакета помощни програми DBMS_COMPARISON в Oracle.
Стъпки за сравняване на два обекта на таблица в Oracle с помощта на DBMS_COMPARISON
Стъпка 1 Създайте сравнението, като използвате DBMS_COMPARISON. В следващия пример той ще сравни една таблица от схемата SCOTT и една таблица от схемата HR в същата база данни и ще създаде сравнение с име 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;/
Изход:
PL/SQL процедурата е завършена успешно.
Стъпка 2 След изпълнение на горния PL/SQL блок, сравнението ще бъде създадено. Следващата стъпка е да изпълните това сравнение, както е показано по-долу.
ЗАДАДЕТЕ 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);АКО НЕ l_diff THENDBMS_OUTPUT.put_line('Намерени са разлики и scan_id е ' || t_scan_info.scan_id);ELSEDBMS_OUTPUT.put_line('END няма намерени разлики IF;END).';/
Изход:
Намерени са разлики и scan_id е процедурата 7PL/SQL успешно завършена.
Стъпка 3 Ако откриете разлики, можете да проверите разликите чрез следната заявка:
ИЗБЕРЕТЕ име_на_сравнение,local_rowid,remote_rowid,statusFROM user_comparison_row_difWHERE имя_на_сравнение ='EMP_COMPARE ';
Изход:
COMPARISON_NAME LOCAL_ROWID REMOTE_ROWID СТАТУС EMP_COMPARE AAAR3sAAEAAAACXAAA AAAU5vAAEAAAAW9AAA DIFEMP_COMPARE AAAR3sAAEAAAACXAAD AAAU5vAAEAAAAW9AAD> DIFЩе получите резултата, както е показано по-горе. В който ще ви покаже името за сравнение, локален идентификатор на ред (идентификатор на ред в таблица scott.emp), идентификатор на отдалечен ред (идентификатор на ред в таблица hr.emp2) и състоянието.
Сега можете да потърсите и двете таблици за тези ROWID, за да проверите разликите.
Можете също да сравните данните от двете таблици от различната схема, като използвате SQL заявката, както е показано в примера по-долу.
ИЗБЕРЕТЕ EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNOFROM scott.empMINUS ИЗБЕРЕТЕ EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO ОТ hr.emp2;Вижте също:
- Разделяне на низ в пример за PL/SQL
- Извличане на DDL изявления от Oracle DUMP (dmp файл)