GENERATE_UNIQUE
GENERATE_UNIQUE 関数は、同じ関数の他の実行と比較して固有である、13 バイトの長さのビット・データ文字ストリング (CHAR(13) FOR BIT DATA) を戻します。この関数は、非決定論的であると定義されます。
関数の結果は、世界時の内部形式、協定世界時 (UTC)、およびシステム・シリアル番号を含む固有値です。 結果が NULL になることはありません。
この関数の結果を使用して表中の固有値を提供することができます。 各値は前の値より大きく、表内で使用できる順序を提供します。シーケンスは、関数が実行された時刻に基づきます。
この関数は、特殊レジスター CURRENT TIMESTAMP を使用する場合と異なり、 同じ SQL ステートメント内でもこの関数のインスタンスごとに固有値が生成され、また、複数行 insert ステートメント、 全選択のある insert ステートメント、または MERGE ステートメント内の insert ステートメントでは、行ごとに固有値が生成されます。
この関数の結果の一部であるタイム・スタンプ値は、GENERATE_UNIQUE の結果を引数として TIMESTAMP 関数を使用して決定することができます。
例
- 各行で固有の列を含む表を作成します。GENERATE_UNIQUE 関数を使用してこの列を移植します。
UNIQUE_ID 列をビット・データ文字ストリングとして識別するために FOR BIT DATA と定義していることに注意してください。
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 1...') INSERT INTO EMP_UPDATE VALUES (GENERATE_UNIQUE(), '000050', 'Update entry 2...')
UNIQUE_ID 列が常に GENERATE_UNIQUE を使用して設定される限り、この表は各行に対して固有 ID を持つことになります。これは、表にトリガーを導入して行うことができます。
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 ステートメントを、以下のように UNIQUE_ID 列に値を指定しないで発行することができます。
INSERT INTO EMP_UPDATE(EMPNO, TEXT) VALUES ('000020', 'Update entry 1...') INSERT INTO EMP_UPDATE(EMPNO, TEXT) VALUES ('000050', 'Update entry 2...')
EMP_UPDATE にいつ行が加えられたかを示すタイム・スタンプ (UTC で) は、以下を使用すると戻されます。
SELECT TIMESTAMP(UNIQUE_ID), EMPNO, TEXT FROM EMP_UPDATE
したがって、行がいつ挿入されたかを記録するタイム・スタンプ列は表には必要ありません。