# IDENTITY_VAL_LOCAL

O Derby suporta a função IDENTITY_VAL_LOCAL.

Sintaxe:

     IDENTITY_VAL_LOCAL ( )

A função IDENTITY_VAL_LOCAL é uma função não determinística, que retorna o valor atribuído mais recentemente a uma coluna identidade para a conexão, onde a atribuição ocorreu como resultado de uma instrução INSERT de um única linha utilizando uma cláusula VALUES.

A função IDENTITY_VAL_LOCAL não possui parâmetros de entrada. O resultado é um DECIMAL (31,0), independentemente do tipo de dado real da coluna identidade correspondente.

O valor retornado pela função IDENTITY_VAL_LOCAL, para a conexão, é o valor atribuído à coluna identidade da tabela identificada na instrução INSERT de uma única linha mais recente. A instrução INSERT deve conter a cláusula VALUES na tabela que contém a coluna de identidade. O valor atribuído é um valor identidade gerado pelo Derby. A função retorna o valor nulo quando não tiver sido emitida uma instrução INSERT de uma única linha com a cláusula VALUES para uma tabela contendo coluna identidade.

O resultado da função não é afetado por:

- Uma instrução INSERT de uma única linha com a cláusula VALUES para uma tabela sem coluna identidade
- Uma instrução INSERT de várias linhas com a cláusula VALUES
- Uma instrução INSERT com um FULLSELECT

Se a tabela com a coluna identidade possuir um gatilho para INSERT definido, que insere em outra tabela com outra coluna identidade, então a função IDENTITY_VAL_LOCAL() retornará o valor gerado para a tabela da instrução, e não para a tabela modificada pelo gatilho.

Exemplos:

    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> -- inserção de vários valores;
    -- valor retornado pela função não deve mudar
    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
    ij> -- inserção som sub-seleção;
    -- valor retornado pela função não deve mudar
    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

Tópico pai: Funções nativas