GENERATE_UNIQUE スカラー関数

GENERATE_UNIQUE 関数は、同一関数の他の実行と比較してユニークである、 13 バイト長のビット・データ文字ストリング (CHAR(13) FOR BIT DATA) を戻します。

Read syntax diagramSkip visual syntax diagramGENERATE_UNIQUE()

スキーマは SYSIBM です。

システムの刻時機構は、関数が実行されるデータベース・パーティション番号とともに、内部の世界標準時 (UTC) タイム・スタンプを生成するのに使用されます。 実際のシステム刻時機構をリバースへ動かす調整を行うと、値が重複する場合があります。

関数は非決定的として定義されます。

この関数には引数がありません (空の括弧を指定する必要があります)。

関数の結果は、内部形式の世界標準時 (UTC)、および関数が処理されたデータベース・パーティション番号から成る固有値になります。 結果が NULL 値になることはありません。

この関数の結果を使用して、表内の固有値を用意することができます。 後続の各値は直前の値より大きくなり、表で使用できる順序列を提供します。 値には、関数が実行されたデータベース・パーティションの番号が組み込まれ、 それにより、複数のデータベース・パーティションにまたがってパーティション化された表も、ある順序列の固有値を持つことになります。 この順序列は、関数が実行された時刻に基づいています。

この関数は、複数行の insert ステートメント、fullselect を指定した insert ステートメント、または MERGE ステートメントでの INSERT 操作で各行に対して固有値が生成されるという点で、特殊レジスター CURRENT TIMESTAMP を使用する場合とは異なります。

この関数の結果の一部であるタイム・スタンプ値は、 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...'),
       (GENERATE_UNIQUE(), '000050', 'Update entry...') 
この表には、行ごとに固有な ID があります。 ただし、UNIQUE_ID 列が、常に GENERATE_UNIQUE を使用して設定されている場合です。 これは、表にトリガーを導入することによって行うことができます。
   CREATE TRIGGER EMP_UPDATE_UNIQUE
     NO CASCADE BEFORE INSERT ON EMP_UPDATE
     REFERENCING NEW AS NEW_UPD
     FOR EACH ROW
     SNEW_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
したがって、表内のタイム・スタンプ列を行の挿入時に記録する必要はありません。