DBPARTITIONNUM スカラー関数
DBPARTITIONNUM 関数は、行のデータベース・パーティション番号を戻します。 例えば、SELECT 節で使用すると、結果セット内の各行のデータベース・パーティション番号を戻します。
スキーマは SYSIBM です。
- column-name
- 表内の任意の列の修飾された名前または無修飾の名前。 行レベルの情報が戻されるので、どの列が指定されるかに関係なく、結果は同じです。 該当の列は、どのようなデータ・タイプであっても構いません。
列がビューの列である場合、ビューの列の式は、基礎となる基本表の列を参照する必要があり、そのビューは削除可能でなければなりません。 ネストされているか、または共通の表式は、ビューと同じ規則に従います。
DBPARTITIONNUM 関数によってデータベース・パーティション番号が戻される特定の行 (および表) は、 この関数を使用する SQL ステートメントのコンテキストから判別されます。
遷移変数および表に戻されるデータベース・パーティション番号は、分散キー列の現行遷移値から得られます。 例えば、挿入前トリガーにおいて、新しい遷移変数の現行値があれば、関数は予想データベース・パーティション番号を戻します。 ただし、分散キー列の値はそれ以後の挿入前トリガーによって変更される場合があります。 したがって、データベースに挿入される時点での行の最終データベース・パーティション番号は、予測値とは異なるかもしれません。
結果
結果のデータ・タイプは INTEGER であり、NULL 値にはなりません。 db2nodes.cfg ファイルがない場合、結果は 0 になります。
注
- DBPARTITIONNUM 関数は、複製された表、チェック制約内、 または生成列の定義で使用することはできません (SQLSTATE 42881)。
- DBPARTITIONNUM 関数は、ユーザー定義関数の作成時にソース関数として使用することはできません。 この関数は、すべてのデータ・タイプを引数として受け入れるので、 ユーザー定義特殊タイプをサポートするための追加のシグニチャーを作成する必要はありません。
- CREATE INDEX ステートメントには、DBPARTITIONNUM 関数を式ベース・キーの一部として使用することはできません。
- 代替構文: 以前のバージョンの Db2® 製品との互換性のために、関数名 NODENUMBER は DBPARTITIONNUM の同義語になっています。
例
- 例 1: EMPLOYEE 表内の指定された従業員の行が、DEPARTMENT 表内の従業員の部門についての記述とは異なるデータベース・パーティションにあるインスタンス数をカウントします。
SELECT COUNT(*) FROM DEPARTMENT D, EMPLOYEE E WHERE D.DEPTNO=E.WORKDEPT AND DBPARTITIONNUM(E.LASTNAME) <> DBPARTITIONNUM(D.DEPTNO) - 例 2: 2 つの表の行が同じデータベース・パーティションにあるようにするため、EMPLOYEE および DEPARTMENT の表を結合します。
SELECT * FROM DEPARTMENT D, EMPLOYEE E WHERE DBPARTITIONNUM(E.LASTNAME) = DBPARTITIONNUM(D.DEPTNO) - 例 3: EMPLOYEE 表で BEFORE トリガーを使用して、EMPINSERTLOG1 という表に、EMPLOYEE 表の従業員番号と新しい行の予想データベース・パーティション番号を記録します。
CREATE TRIGGER EMPINSLOGTRIG1 BEFORE INSERT ON EMPLOYEE REFERENCING NEW AW NEWTABLE FOR EACH ROW INSERT INTO EMPINSERTLOG1 VALUES(NEWTABLE.EMPNO, DBPARTITIONNUM (NEWTABLE.EMPNO))
