Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm thế nào để so sánh hai đối tượng cơ sở dữ liệu trong Oracle?

Trong hướng dẫn này, tôi đưa ra một ví dụ để so sánh hai đối tượng bảng cơ sở dữ liệu của các lược đồ khác nhau bằng cách sử dụng gói tiện ích DBMS_COMPARISON trong Oracle.

Các bước so sánh hai đối tượng bảng trong Oracle bằng DBMS_COMPARISON

Bước 1 Tạo so sánh bằng DBMS_COMPARISON. Trong ví dụ sau, nó sẽ so sánh một bảng từ lược đồ SCOTT và một bảng từ lược đồ HR trong cùng một cơ sở dữ liệu và sẽ tạo một so sánh có tên 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;
/

Đầu ra:

PL/SQL procedure successfully completed.

Bước 2 Sau khi thực thi khối PL / SQL ở trên, so sánh sẽ được tạo. Bước tiếp theo là chạy so sánh này như được hiển thị bên dưới.

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

Đầu ra:

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

Bước 3 Nếu tìm thấy sự khác biệt thì bạn có thể kiểm tra sự khác biệt bằng truy vấn sau:

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

Đầu ra:

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

Bạn sẽ nhận được kết quả như hình trên. Trong đó nó sẽ hiển thị cho bạn tên so sánh, id hàng cục bộ (id hàng bảng scott.emp), id hàng từ xa (id hàng bảng hr.emp2) và trạng thái.

Bây giờ, bạn có thể truy vấn cả hai bảng cho các ROWID này để kiểm tra sự khác biệt.

Bạn cũng có thể so sánh dữ liệu hai bảng từ các giản đồ khác nhau bằng cách sử dụng truy vấn SQL, như được minh họa trong ví dụ bên dưới.

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;

Xem thêm:

  • Tách một chuỗi trong ví dụ PL / SQL
  • Trích xuất các câu lệnh DDL từ Oracle DUMP (tệp 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. Sử dụng LIKE trong mệnh đề Oracle IN

  2. ORA-00904:số nhận dạng không hợp lệ

  3. 6 cách chọn hàng trùng lặp trong Oracle

  4. Oracle có hỗ trợ tìm kiếm toàn văn không?

  5. Cách gửi một yêu cầu POST với dữ liệu biểu mẫu và các tham số trong PL / SQL