構文
構文: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のレコードが削除されている