Is ora_hash deterministic?

前端 未结 2 1379
遥遥无期
遥遥无期 2020-12-16 17:33

I am working with an Oracle database and I need to be able to partition the data in a table. I understand that Rracle has an ora_hash function that can partition the data i

相关标签:
2条回答
  • 2020-12-16 17:48

    Jon Heller's answer has some more details, so go upvote his answer. Since this is the accepted answer still, I'll inline part of his response:

    ORA_HASH is definitely deterministic for data types that can be used for partitioning, such as NUMBER, VARCHAR, DATE, etc.

    But ORA_HASH is not deterministic for at least some of the other data types, such as CLOB.

    0 讨论(0)
  • 2020-12-16 17:48

    ORA_HASH is definitely deterministic for data types that can be used for partitioning, such as NUMBER, VARCHAR, DATE, etc.

    But ORA_HASH is not deterministic for at least some of the other data types, such as CLOB.


    My answer is based on this Jonathan Lewis article about ORA_HASH.

    Jonathan Lewis doesn't explicitly say they are deterministic, but he does mention that ORA_HASH "seems to be the function used internally – with a zero seed – to determine which partition a row belongs to in a hash partitioned table". And if it's used for hash partitioning then it must be deterministic, or else partition-wise joins wouldn't work.

    To show that ORA_HASH can be non-deterministic for some data types, run the below query. It's from a comment in the same article:

    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;
    

    Surprisingly, this same issues happens with dbms_sqlhash.gethash.

    0 讨论(0)
提交回复
热议问题