>>-GENERATE_UNIQUE--(--)---------------------------------------><
スキーマは SYSIBM です。
GENERATE_UNIQUE 関数は、同一関数の他の実行と比較して固有である、 13 バイト長のビット・データ文字ストリング (CHAR(13) FOR BIT DATA) を戻します。 41 この関数は、deterministic 関数ではないものとして定義されます。
この関数には引き数がありません (空の括弧を指定する必要があります)。
関数の結果は、内部形式の世界標準時 (UTC)、 および関数が処理された区分番号を含む固有な値になります。 結果がヌル値になることはありません。
この関数の結果を使用して、表の固有値を用意することができます。 後続の各値は直前の値より大きくなり、表で使用できる順序列を提供します。
値には、関数が実行された区分の番号が含まれ、 それにより、複数の区分にわたって区分化された表もある順序列の固有値を持つことになります。 この順序列は、関数が実行された時刻に基づいています。
この関数は、特殊レジスター CURRENT TIMESTAMP を使用する場合とは異なります。 この特殊レジスターの場合、 複数行の挿入ステートメントまたは全選択を伴う挿入ステートメントの各行について固有値が生成されます。
この関数の結果の一部であるタイム・スタンプ値は、 GENERATE_UNIQUE の結果を引き数にする TIMESTAMP スカラー関数を使用して決定することができます。
例:
CREATE TABLE EMP_UPDATE (UNIQUE_ID CHAR(13) FOR BIT DATA, EMPNO CHAR(6), TEXT VARCHAR(1000)) INSERT INTO EMP_UPDATE VALUES (GENERATE_UNIQUE(), '000020', 'Update entry...'), (GENERATE_UNIQUE(), '000050', 'Update entry...')
この表には、行ごとに固有の識別子があります。 ただし、UNIQUE_ID 列が、常に GENERATE_UNIQUE を使用して設定されている場合です。 これは、表にトリガーを導入することによって行うことができます。
CREATE TRIGGER EMP_UPDATE_UNIQUE NO CASCADE BEFORE INSERT ON EMP_UPDATE REFERENCING NEW AS NEW_UPD FOR EACH ROW MODE DB2SQL SET NEW_UPD.UNIQUE_ID = GENERATE_UNIQUE()
このトリガーを定義すると、 以下のように最初の列を指定せずに上記の INSERT ステートメントを出すことができます。
INSERT INTO EMP_UPDATE (EMPNO, TEXT) VALUES ('000020', 'Update entry 1...'), ('000050', 'Update entry 2...')
行が EMP_UPDATE に追加された時点のタイム・スタンプ (UTC における) は、 以下を使用して戻すことができます。
SELECT TIMESTAMP (UNIQUE_ID), EMPNO, TEXT FROM EMP_UPDATE
したがって、表内のタイム・スタンプ列を行の挿入時に記録する必要はありません。