sql >> Database >  >> RDS >> Oracle

Oracle SQL maakt automatisch VARCHAR verhoogde PK

Dit is een goede use case voor IDENTITY en VIRTUEEL kolommen. Dus geen extra SEQUENTIE . nodig en 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);

Resultaat:

select * from sample;

 SERIAL_NO TNT_ID                         WTV
---------- ----------------------- ----------
         1 TNT00001                       100
         2 TNT00002                       200
         3 TNT00003                       300

Hoe het werkt:

  1. NUMBER GENERATED ALWAYS AS IDENTITY :Dit creëert automatisch de vereiste reeks voor u, begint met 1 en wordt standaard met 1 verhoogd.
  2. GENERATED ALWAYS AS VIRTUAL :Hiermee wordt een virtuele kolom gemaakt waarvan de waarden automatisch worden berekend met behulp van andere kolomwaarden. In deze demo wordt de identiteitskolom gebruikt.
  3. LPAD :Dit zorgt ervoor dat nullen worden opgevuld terwijl de kolomwaarde wordt verhoogd, maar zorgt er ook voor dat wanneer het getal wordt verhoogd, dit de lengte van de tekenreeks niet vergroot.
  4. CONCAT :Dit zal TNT . samenvoegen tot boven de waarde.


  1. Som voor meerdere perioden in één zoekopdracht?

  2. Zoeken in volledige tekst gebruiken in SQL Server 2008 voor meerdere tabellen, kolommen

  3. Ik wil een array van objecten opslaan in MySQL in een afzonderlijke kolom met Sequelize

  4. IF else-voorwaarde in SQL-opgeslagen procedure