IDENTITY_VAL_LOCAL関数

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

構文:
 IDENTITY_VAL_LOCAL ( )

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

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

IDENTITY_VAL_LOCAL関数により、ある接続に返される値は、単行のINSERT文で識別列に代入された最近の値です。INSERT文は識別列を持つ表へのVALUES節を持たなければなりません。 代入された値はDerbyが生成した識別値です。 もし識別列を持つ表に対して単行の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