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

Hvordan sammenligner man to databaseobjekter i Oracle?

I denne øvelse giver jeg et eksempel til at sammenligne to databasetabelobjekter med forskellige skemaer ved hjælp af hjælpepakken DBMS_COMPARISON i Oracle.

Trin til at sammenligne to tabelobjekter i Oracle ved hjælp af DBMS_COMPARISON

Trin-1 Opret sammenligningen ved hjælp af DBMS_COMPARISON. I det følgende eksempel vil den sammenligne den ene tabel fra SCOTT-skemaet og en tabel fra HR-skemaet i den samme database og vil skabe en sammenligning med navnet 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;
/

Output:

PL/SQL procedure successfully completed.

Trin-2 Efter at have udført ovenstående PL/SQL-blok, ville sammenligningen blive oprettet. Det næste trin er at køre denne sammenligning som vist nedenfor.

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

Output:

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

Trin-3 Hvis der er fundet forskelle, kan du kontrollere forskellene med følgende forespørgsel:

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

Output:

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

Du får output som vist ovenfor. I hvilken den vil vise dig sammenligningsnavnet, det lokale række-id (scott.emp-tabelrække-id), fjernrække-id (hr.emp2-tabelrække-id) og status.

Nu kan du forespørge i begge tabeller for disse ROWID'er for at kontrollere forskellene.

Du kan også sammenligne de to tabeldata fra det forskellige skema ved hjælp af SQL-forespørgslen, som vist i eksemplet nedenfor.

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;

Se også:

  • Opdel en streng i PL/SQL-eksempel
  • Udtræk DDL-erklæringer fra Oracle DUMP (dmp-fil)
  1. Funktionen MySQL LEAST() – Find det mindste argument i en liste over argumenter

  2. cursor.execute(INSERT INTO im_entry.test (+entrym+) VALUES ('+p+');)

  3. Oracle-klientinstallationsfejl - stien er for lang

  4. Database Performance Tuning til MariaDB