は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