ORA_HASH
pasti deterministik untuk tipe data yang dapat digunakan untuk partisi, seperti NUMBER, VARCHAR, DATE, dll.
Tapi ORA_HASH
adalah tidak deterministik untuk setidaknya beberapa tipe data lain, seperti CLOB.
Jawaban saya didasarkan pada ini
Artikel Jonathan Lewis tentang ORA_HASH
.
Jonathan Lewis tidak secara eksplisit mengatakan mereka deterministik, tetapi dia menyebutkan bahwa ORA_HASH
"tampaknya fungsi yang digunakan secara internal - dengan benih nol - untuk menentukan partisi mana yang termasuk dalam baris dalam tabel yang dipartisi hash". Dan jika digunakan untuk partisi hash maka harus bersifat deterministik, jika tidak, penggabungan partisi tidak akan berfungsi.
Untuk menunjukkan bahwa ORA_HASH
bisa non-deterministik untuk beberapa tipe data, jalankan kueri di bawah ini. Ini dari komentar di artikel yang sama:
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;
Anehnya, masalah yang sama ini terjadi dengan dbms_sqlhash.gethash
.