HASHEDVALUE スカラー関数

HASHEDVALUE 関数は、パーティション関数を行の分散キー値に適用することによって入手された行の分散マップ索引を戻します。

構文図を読む構文図をスキップするHASHEDVALUE(column-name )

スキーマは SYSIBM です。

column-name
表内の列名 (修飾子付きまたは修飾子なし)。該当の列は、どのようなデータ・タイプであっても構いません。

列がビューの列である場合、その列のビューの式は基礎となる基本表の列を参照する必要があり、そのビューは削除可能でなければなりません。 ネストされているか、または共通の表式は、ビューと同じ規則に従います。

この関数の応用の例は、SELECT ステートメントの結果の生成に使用された表の各行の分散マップ索引を返す SELECT 節での使用です。

遷移変数および表に戻される分散マップ索引は、分散キー列の現行遷移値から派生します。 例えば、挿入前トリガーにおいて、新しい遷移変数の現行値があれば、関数は予測分散マップ索引を戻します。 ただし、分散キー列の値はそれ以後の挿入前トリガーによって変更される場合があります。 したがって、データベースに挿入される時点で、行の最終分散マップ索引は予測値と異なるかもしれません。

HASHEDVALUE 関数によって分散マップ索引が戻される特定の行 (および表) は、 この関数を使用する SQL ステートメントのコンテキストから判別されます。

結果

結果のデータ・タイプは、0 から 32767 の範囲の INTEGER です。 分散キーのない表の場合、結果は常に 0 になります。NULL 値が戻されることはありません。 行レベルの情報が戻されるので、どの列が表に指定されるかに関係なく、結果は同じです。

  • HASHEDVALUE 関数は、複製された表、チェック制約内、 または生成列の定義で使用することはできません (SQLSTATE 42881)。
  • HASHEDVALUE 関数は、ユーザー定義関数の作成時にソース関数として使用することはできません。この関数は、すべてのデータ・タイプを引数として受け入れるので、 ユーザー定義特殊タイプをサポートするための追加のシグニチャーを作成する必要はありません。
  • CREATE INDEX ステートメントには、HASHEDVALUE 関数を式ベース・キーの一部として使用することはできません。

  • 例 1: 分散マップ索引が 100 であるすべての行について、EMPLOYEE 表から従業員番号 (EMPNO) をリストします。
       SELECT EMPNO FROM EMPLOYEE
         WHERE HASHEDVALUE(PHONENO) = 100
  • 例 2: 表 EMPLOYEE で BEFORE トリガーを作成して、従業員の挿入の際には必ず、 EMPINSERTLOG2 という表に従業員番号と新しい行の予測分散マップ索引を記録します。
       CREATE TRIGGER EMPINSLOGTRIG2
         BEFORE INSERT ON EMPLOYEE
         REFERENCING NEW AW NEWTABLE
         FOR EACH ROW
         INSERT INTO EMPINSERTLOG2
           VALUES(NEWTABLE.EMPNO, HASHEDVALUE(NEWTABLE.EMPNO))