Zielony Smok - logo witryny

Apache Derby: funkcja IDENTITY_VAL_LOCAL

Opis

Kolumny oznaczone jako IDENTITY to kolumny wypełniane wartościami automatycznie. Funkcja IDENTITY_VAL_LOCAL zwraca ostatnią wartość jaka została wpisana w kolumnie tożsamościowej przy ostatnim wpisie w danej tabeli przy użyciu instrukcji INSERT z użyciem klauzuli VALUES, niekoniecznie zawierającym w wykazie kolumn kolumnę IDENTITY.

Składnia

IDENTITY_VAL_LOCAL( )

Ograniczenia

Wynik jest typu DECIMAL(31,0) niezależnie od typu kolumny IDENTITY. Jeśli instrukcja INSERT dla kolumny IDENTITY nie była wywoływana – wynik jest NULL.

Klasa R081_IDENTITY_VAL_LOCAL.java:
package aderby.functions.info;

import aderby.DerbyUtil;

import java.io.*;
import java.sql.*;

public class R081_IDENTITY_VAL_LOCAL {
    private static final String baza = "C:/Przyklady/r081_identity";
    private static final String skrypt = "aderby/src/resources/sqls/temperatura3.sql";

    public static void main(String[] args) {
        DerbyUtil.startDerbyEngine(DerbyUtil.embdriver);
        Connection con = DerbyUtil.connectEmbeddedDB(baza, ";create=true");
        DerbyUtil.jdbcRunScript(skrypt, con);
        Statement stat = null;
        ResultSet rs = null;
        try {
            stat = con.createStatement();
            rs = stat.executeQuery(
                    "SELECT IDENTITY_VAL_LOCAL() FROM temperatura");
            rs.next();
            System.out.println(rs.getBigDecimal(1));
        } catch (SQLException e) {
            e.printStackTrace();
        }
        DerbyUtil.close(stat);
        DerbyUtil.close(con);
        DerbyUtil.close(rs);
        DerbyUtil.shutdownEmbeddedDB(baza);
        DerbyUtil.shutdownDerbyEngine();
        DerbyUtil.dropDatabase(new File(baza));
    }
}
Plik temperatura3.sql
CREATE TABLE temperatura(
            id INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS 
                    IDENTITY(START WITH 1, INCREMENT BY 1),
            czujnik INTEGER,
            val DOUBLE
);

CREATE INDEX i_czujnik ON temperatura (czujnik ASC);
CREATE INDEX i_val ON temperatura (val ASC);

INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 2, 37.8);
INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 1, 39.7);
INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 3, 36.6);
INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 3, 33.2);
INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 2, 39.2);
INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 2, 40.6);
INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 2, 41.2);
INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 1, 40.1);
INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 1, 39.8);
INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 2, 38.9);
INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 1, 38.3);
INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 2, 37.9);
INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 2, 37.4);
INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 3, 37.1);
INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 3, 36.8);
INSERT INTO temperatura (id, czujnik, val) VALUES (DEFAULT, 3, 36.7);
INSERT INTO temperatura (czujnik, val) VALUES (1, 36.6);

Wynik

17

Komentarz

Wprowadziliśmy 17 wyników. Wartość wynosi 17. Ostatni wynik został również uwzględniony mimo, że kolumna ‘id’ nie była bezpośrednio wymieniona w ‘VALUES’, ponieważ dane w kolumnie były wstawione automatycznie.

Pliki do ściągnięcia

Aktualny (tworzony narastająco) plik module-info.java

Aktualny (tworzony narastająco) plik DerbyUtil.java

Pliki tworzone narastająco zastępują poprzednie pliki o tej samej nazwie i działają dla wszystkich wcześniej opublikowanych przykładów we wszystkich wpisach w projekcie. W przypadku pliku module-info.java może być potrzebne skreślenie niepotrzebnych wpisów.