Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle SQL cria automaticamente PK incrementado VARCHAR


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:
  1. 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.
  2. 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.
  3. 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.
  4. CONCAT :Isso irá concatenar TNT para o valor acima.