Este é um bom caso de uso para IDENTITY e VIRTUAL colunas. Portanto, não há necessidade de uma SEQUÊNCIA adicional e GATILHO .
Demonstração:
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);
Resultado:
select * from sample;
SERIAL_NO TNT_ID WTV
---------- ----------------------- ----------
1 TNT00001 100
2 TNT00002 200
3 TNT00003 300
Como funciona:
NUMBER GENERATED ALWAYS AS IDENTITY
:isso cria automaticamente a sequência necessária para você, começa com 1 e aumenta em 1 por padrão.GENERATED ALWAYS AS VIRTUAL
:isso cria uma coluna virtual cujos valores são calculados automaticamente usando outros valores de coluna. Nesta demonstração, ele usa a coluna de identidade.LPAD
:isso garantirá que os zeros sejam preenchidos à esquerda enquanto o valor da coluna for incrementado, mas também garantirá que, quando o número for incrementado, ele não aumentará o comprimento da string.CONCAT
:Isso irá concatenarTNT
para o valor acima.