sql >> データベース >  >> RDS >> Oracle

ora_hashは決定論的ですか?

    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でも発生します。 。



    1. 特定の値のMySQLでJsonキーを取得する

    2. 関数を作成せずにSQLServerで区切り文字列を分割するにはどうすればよいですか?

    3. MySQLは、2つのテーブルの2つのフィールドを結果セットの1つのフィールドにマージします

    4. 一意の整数で既存のレコードを更新する