Toto je dobrý případ použití pro IDENTITY a VIRTUÁLNÍ sloupců. Není tedy potřeba další SEKVENCE a TRIGGER .
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);
Výsledek:
select * from sample;
SERIAL_NO TNT_ID WTV
---------- ----------------------- ----------
1 TNT00001 100
2 TNT00002 200
3 TNT00003 300
Jak to funguje:
NUMBER GENERATED ALWAYS AS IDENTITY
:Tím se automaticky vytvoří požadovaná sekvence, která začíná 1 a ve výchozím nastavení se zvyšuje o 1.GENERATED ALWAYS AS VIRTUAL
:Tím se vytvoří virtuální sloupec, jehož hodnoty se vypočítávají automaticky pomocí hodnot jiných sloupců. V této ukázce používá sloupec identity.LPAD
:Tím zajistíte, že při zvýšení hodnoty sloupce zůstanou nuly, ale také to, že když se číslo zvýší, nezvětší se délka řetězce.CONCAT
:Tím dojde ke spojeníTNT
na vyšší hodnotu.