IDENTITY_VAL_LOCAL関数

はIDENTITY_VAL_LOCAL関数をサポートします。

構文: IDENTITY_VAL_LOCAL ( )

IDENTITY_VAL_LOCAL関数は非決定性の関数で、最近その接続でVALUES節のあるINSERT文により識別列へ代入された値を返します。

IDENTITY_VAL_LOCAL関数には引数はありません。関数の結果は対応する識別列のデータ型によらずDECIMAL (31,0)です。

IDENTITY_VAL_LOCAL関数により、ある接続に返される値は、単行のINSERT文で識別列に代入された最近の値です。INSERT文は識別列を持つ表へのVALUES節を持たなければなりません。 代入された値はが生成した識別値です。 もし識別列を持つ表に対して単行のINSERT文が発行されていないなら、この関数はnullを返します。

この関数の結果は以下の事柄に影響を受けません。

  • 識別列のないVALUES節を持つ単行のINSERT文
  • VALUES節を持つ複数行のINSERT文
  • selectによるINSERT文

もし識別列を持つ表にINSERTトリガが定義されており、そのトリガが別の識別列を持つ表への挿入を行う場合、IDENTITY_VAL_LOCAL()関数は文で生成された値を返し、トリガによる値を返しません。

例:

ij> create table t1(c1 int generated always as identity, c2 int); 0 rows inserted/updated/deleted ij> insert into t1(c2) values (8); 1 row inserted/updated/deleted ij> values IDENTITY_VAL_LOCAL(); 1 ------------------------------- 1 1 row selected ij> select IDENTITY_VAL_LOCAL()+1, IDENTITY_VAL_LOCAL()-1 from t1; 1 |2 ------------------------------------------------------------------- 2 |0 1 row selected ij> insert into t1(c2) values (IDENTITY_VAL_LOCAL()); 1 row inserted/updated/deleted ij> select * from t1; C1 |C2 ------------------------------- 1 |8 2 |1 2 rows selected ij> values IDENTITY_VAL_LOCAL(); 1 ------------------------------- 2 1 row selected ij> insert into t1(c2) values (8), (9); 2 rows inserted/updated/deleted ij> -- 複数の値の挿入では、関数が返す値は変わらない。 values IDENTITY_VAL_LOCAL(); 1 ------------------------------- 2 1 row selected ij> select * from t1; C1 |C2 ------------------------------- 1 |8 2 |1 3 |8 4 |9 4 rows selected ij> insert into t1(c2) select c1 from t1; 4 rows inserted/updated/deleted -- selectを元にした挿入では、関数が返す値は変わらない。 ij> values IDENTITY_VAL_LOCAL(); 1 ------------------------------- 2 1 row selected ij> select * from t1; C1 |C2 ------------------------------- 1 |8 2 |1 3 |8 4 |9 5 |1 6 |2 7 |3 8 |4 8 rows selected