GAGA LIFE.

インフラエンジニアブログ

スポンサーリンク

ORA_HASHの使用

構文

構文:ORA_HASH(expr,max_bucket,seed_value)

目的

ORA_HASHファンクションは、指定された式のハッシュ値を計算します。
このファンクションは、データのサブセットの分析や、ランダムな標本の生成などの操作に有効です。

・expr引数には、Oracle Databaseでハッシュ値を計算するデータを指定します。exprに指定できるデータの長さに制限はありません。
このデータは通常、列名です。exprは、LONG型またはLOB型にすることはできません。
また、ネストした表型でない場合は、ユーザー定義オブジェクト型にすることはできません。
ネストした表型のハッシュ値は、コレクション内の要素の順序に依存しません。
その他のデータ型はすべて、exprでサポートされています。
・オプションのmax_bucket引数には、ハッシュ・ファンクションから戻される最大バケット値を指定します。
0(ゼロ)から4294967295の任意の値を指定できます。デフォルト値は4294967295です。
・オプションのseed_value引数を指定すると、同じデータ・セットに対して様々な結果を生成できます。
Oracleは、ハッシュ・ファンクションをexprとseed_valueの組合せに適用します。
0(ゼロ)から4294967295の任意の値を指定できます。デフォルト値は0です。

戻り値はNUMBERです。

使用例

SQL> SELECT ORA_HASH('ABCDE',1000,0) FROM DUAL;

ORA_HASH('ABCDE',1000,0)
------------------------
                     960

SQL> SELECT ORA_HASH('ABCDE',1000,1) FROM DUAL;

ORA_HASH('ABCDE',1000,1)
------------------------
                     207

応用(STSデータ)

ハッシュ分割して削除(UNDO使用の抑止目的)

SQL> SELECT ORA_HASH(SQL_ID,10,1),count(*)
  FROM TABLE(DBMS_SQLTUNE.SELECT_SQLSET('SYS_AUTO_STS'))
group by ORA_HASH(SQL_ID,10,1)
order by ORA_HASH(SQL_ID,10,1)
;
  2    3    4    5  

ORA_HASH(SQL_ID,10,1)   COUNT(*)
--------------------- ----------
                    0       4033
                    1       3983
                    2       3910
                    3       3947
                    4       4032
                    5       3880
                    6       4076
                    7       3888
                    8       4077
                    9       3945
                   10       3925

11 rows selected.

戻り値1を削除

SQL>  EXEC DBMS_SQLTUNE.DELETE_SQLSET(sqlset_name => 'SYS_AUTO_STS', basic_filter  => 'ORA_HASH(SQL_ID,10,1) = 1');

PL/SQL procedure successfully completed.

SQL> SELECT ORA_HASH(SQL_ID,10,1),count(*)
  FROM TABLE(DBMS_SQLTUNE.SELECT_SQLSET('SYS_AUTO_STS'))
group by ORA_HASH(SQL_ID,10,1)
order by ORA_HASH(SQL_ID,10,1)
;
  2    3    4    5  

ORA_HASH(SQL_ID,10,1)   COUNT(*)
--------------------- ----------
                    0       4033
                    2       3910
                    3       3947
                    4       4032
                    5       3880
                    6       4076
                    7       3888
                    8       4077
                    9       3945
                   10       3925

戻り値1のレコードが削除されている

スポンサーリンク