GENERATE_UNIQUE スカラー関数
GENERATE_UNIQUE 関数は、同一関数の他の実行と比較してユニークである、 13 バイト長のビット・データ文字ストリング (CHAR(13) FOR BIT DATA) を戻します。
スキーマは SYSIBM です。
システムの刻時機構は、関数が実行されるデータベース・パーティション番号とともに、内部の世界標準時 (UTC) タイム・スタンプを生成するのに使用されます。 実際のシステム刻時機構をリバースへ動かす調整を行うと、値が重複する場合があります。
関数は非決定的として定義されます。
この関数には引数がありません (空の括弧を指定する必要があります)。
関数の結果は、内部形式の世界標準時 (UTC)、および関数が処理されたデータベース・パーティション番号から成る固有値になります。 結果が NULL 値になることはありません。
この関数の結果を使用して、表内の固有値を用意することができます。 後続の各値は直前の値より大きくなり、表で使用できる順序列を提供します。 値には、関数が実行されたデータベース・パーティションの番号が組み込まれ、 それにより、複数のデータベース・パーティションにまたがってパーティション化された表も、ある順序列の固有値を持つことになります。 この順序列は、関数が実行された時刻に基づいています。
この関数は、複数行の insert ステートメント、fullselect を指定した insert ステートメント、または MERGE ステートメントでの INSERT 操作で各行に対して固有値が生成されるという点で、特殊レジスター CURRENT TIMESTAMP を使用する場合とは異なります。
この関数の結果の一部であるタイム・スタンプ値は、 GENERATE_UNIQUE の結果を引数にする TIMESTAMP スカラー関数を使用して決定することができます。
例
「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
したがって、表内のタイム・スタンプ列を行の挿入時に記録する必要はありません。