Bạn có thể sử dụng DBMS_SQLHASH.GETHASH
cho điều này. Kết quả truy vấn phải được sắp xếp theo thứ tự và không được chứa bất kỳ LOB nào, nếu không kết quả sẽ không mang tính xác định.
select dbms_sqlhash.gethash(q'[select * from some_table order by 1,2]', digest_type => 1)
from dual;
Trong đó kiểu tiêu hóa 1 =HASH_MD4, 2 =HASH_MD5, 3 =HASH_SH1.
Gói đó không được cấp cho bất kỳ ai theo mặc định. Để sử dụng nó, bạn sẽ cần ai đó đăng nhập bằng SYS và chạy nó:
SQL> grant execute on dbms_sqlhash to <your_user>;
Kết quả truy vấn phải được sắp xếp theo thứ tự, như được mô tả trong "Lỗi 17082212:DBMS_SQLHASH KẾT QUẢ KHÁC BIỆT TỪ CÁC ĐƯỜNG TRUY CẬP KHÁC NHAU".
Tôi không chắc tại sao LOB không hoạt động, nhưng nó có thể liên quan đến cách hàm ORA_HASH
không hoạt động tốt với LOB. Bài viết này của Jonathan Lewis bao gồm một số ví dụ về ORA_HASH
trả về các kết quả khác nhau cho cùng một dữ liệu LOB. Và các phiên bản gần đây của Tham chiếu ngôn ngữ SQL cảnh báo rằng ORA_HASH
không hỗ trợ LOB.