Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да сравним два обекта на база данни в Oracle?

В този урок давам пример за сравняване на два обекта на таблици на база данни с различни схеми с помощта на пакета помощни програми 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 файл)
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Последователност на Oracle, започваща с 2 вместо с 1

  2. Откриване на цикъл с рекурсивно факториране на подзаявка

  3. Oracle String функции (пълен списък)

  4. Форматът на датата по подразбиране на Oracle е ГГГГ-ММ-ДД, ЗАЩО?

  5. Промяна на SYS парола в RAC