ORA_HASH
NUMBER、VARCHAR、DATEなどのパーティショニングに使用できるデータ型の場合は間違いなく決定論的です。
ただし、ORA_HASH
ない CLOBなど、他のデータ型の少なくとも一部については決定論的です。
私の答えはORA_HASH
に関するJonathanLewisの記事 。
Jonathan Lewisは、それらが決定論的であると明示的には述べていませんが、ORA_HASH
については言及しています。 「ハッシュパーティションテーブルで行がどのパーティションに属するかを決定するために、シードがゼロの内部で使用される関数のようです」。また、ハッシュパーティショニングに使用する場合は、決定論的である必要があります。そうしないと、パーティションごとの結合が機能しません。
そのORA_HASH
を表示するには 一部のデータ型では非決定的である可能性があるため、以下のクエリを実行します。同じ記事のコメントからです:
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;
驚いたことに、これと同じ問題がdbms_sqlhash.gethash
でも発生します。 。