Questo è un buon caso d'uso per IDENTITY e VIRTUALE colonne. Quindi, non c'è bisogno di un'ulteriore SEQUENZA e 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);
Risultato:
select * from sample;
SERIAL_NO TNT_ID WTV
---------- ----------------------- ----------
1 TNT00001 100
2 TNT00002 200
3 TNT00003 300
Come funziona:
NUMBER GENERATED ALWAYS AS IDENTITY
:Questo crea automaticamente la sequenza richiesta per te, inizia con 1 e aumenta di 1 per impostazione predefinita.GENERATED ALWAYS AS VIRTUAL
:Questo crea una colonna virtuale i cui valori vengono calcolati automaticamente utilizzando altri valori di colonna. In questa demo utilizza la colonna Identity.LPAD
:Ciò assicurerà che gli zeri vengano lasciati riempiti mentre il valore della colonna viene incrementato, ma assicurerà anche che quando il numero viene incrementato non aumenta la lunghezza della stringa.CONCAT
:Questo concateneràTNT
al di sopra del valore.