Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle SQL erstellt automatisch VARCHAR-inkrementierte PK

Dies ist ein guter Anwendungsfall für IDENTITY und VIRTUELL Säulen. Es ist also keine zusätzliche SEQUENCE erforderlich und 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);

Ergebnis:

select * from sample;

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

Wie es funktioniert:

  1. NUMBER GENERATED ALWAYS AS IDENTITY :Dies erstellt automatisch die erforderliche Sequenz für Sie, beginnt mit 1 und erhöht sich standardmäßig um 1.
  2. GENERATED ALWAYS AS VIRTUAL :Dadurch wird eine virtuelle Spalte erstellt, deren Werte automatisch anhand anderer Spaltenwerte berechnet werden. In dieser Demo wird die Identitätsspalte verwendet.
  3. LPAD :Dadurch wird sichergestellt, dass Nullen aufgefüllt bleiben, während der Spaltenwert erhöht wird, aber es wird auch sichergestellt, dass die Länge der Zeichenfolge nicht erhöht wird, wenn die Zahl erhöht wird.
  4. CONCAT :Dies wird TNT verketten auf über dem Wert.