ORA_HASH
chắc chắn là xác định đối với các loại dữ liệu có thể được sử dụng để phân vùng, chẳng hạn như NUMBER, VARCHAR, DATE, v.v.
Nhưng ORA_HASH
không xác định cho ít nhất một số kiểu dữ liệu khác, chẳng hạn như CLOB.
Câu trả lời của tôi dựa trên điều này
Jonathan Lewis bài viết về ORA_HASH
.
Jonathan Lewis không nói rõ ràng rằng chúng là xác định, nhưng anh ấy đã đề cập đến ORA_HASH
"dường như là hàm được sử dụng nội bộ - với hạt giống 0 - để xác định phân vùng nào thuộc về một hàng trong bảng phân vùng băm". Và nếu nó được sử dụng để phân vùng băm thì nó phải có tính xác định, nếu không các phép nối phân vùng khôn ngoan sẽ không hoạt động.
Để hiển thị ORA_HASH
đó có thể không xác định đối với một số kiểu dữ liệu, hãy chạy truy vấn bên dưới. Đó là từ một bình luận trong cùng một bài viết:
with src as (select to_clob('42') val from dual connect by level<=5)
select val,ora_hash(val,7) from src order by 2;
Đáng ngạc nhiên là vấn đề tương tự này cũng xảy ra với dbms_sqlhash.gethash
.