To dobry przypadek użycia IDENTITY i WIRTUALNE kolumny. Nie ma więc potrzeby dodatkowej SEKWENCJI i WYZWALANIE .
Demo:
CREATE TABLE sample (
serial_no NUMBER GENERATED ALWAYS AS IDENTITY,
tnt_id GENERATED ALWAYS AS (CONCAT('TNT', LPAD(serial_no, 5, '0'))) VIRTUAL,
wtv NUMBER(3)
);
insert into sample (wtv) values(100);
insert into sample (wtv) values(200);
insert into sample (wtv) values(300);
Wynik:
select * from sample;
SERIAL_NO TNT_ID WTV
---------- ----------------------- ----------
1 TNT00001 100
2 TNT00002 200
3 TNT00003 300
Jak to działa:
NUMBER GENERATED ALWAYS AS IDENTITY
:To automatycznie tworzy wymaganą sekwencję, zaczyna się od 1 i domyślnie zwiększa się o 1.GENERATED ALWAYS AS VIRTUAL
:Tworzy wirtualną kolumnę, której wartości są obliczane automatycznie przy użyciu innych wartości kolumn. W tym demo używa kolumny tożsamości.LPAD
:Zapewni to dopełnienie zer podczas zwiększania wartości kolumny, ale także zapewni, że zwiększenie liczby nie zwiększy długości ciągu.CONCAT
:To połączyTNT
powyżej wartości.