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)