ALTER TABLE MODIFY COLUMN - Datentypänderung bei großen Tabellen mit virtueller Spalte

Typänderungen bei großen Tabellen können ein Problem sein.

Wenn alter table modify column nicht geht oder zu lange dauert (aus diversen Gründen), kann eine (von mehreren) Alternativen sein, mit virtuellen Spalten zu arbeiten.

Bsp.
Helden der Datenmodellierung haben die Spalte Postleitzahl als number(5) definiert.
(logisch, ist ja eine Zahl; blöd nur dass ganz Sachsen führende 0er in der PLZ haben)

alter table modify column würde aus 1187 aber auch kein 01187 für Dresden machen. Dazu bräuchte es noch ein Update, was ggfs. richtig aufwändig wird.


Alternative mit virtueller Spalte:

A) Umbenennen der bestehenden Spalte:
ALTER TABLE tbl RENAME COLUMN ANSCHRIFT_PLZ TO ANSCHRIFT_PLZ_N;

B) Neue, virtuelle Spalte anlegen:
ALTER TABLE tbl ADD ANSCHRIFT_PLZ VARCHAR2(5 char) GENERATED ALWAYS AS (LPAD(ANSCHRIFT_PLZ_N,5,'0')) VIRTUAL

Fall es Probleme beim umbenennen der bestehenden Spalte gibt, ggfs hier nachschauen:
https://frankschmidt.blogspot.com/2018/10/hidden-columns-entdecken-ora-54032.html

Vorteil: einfach und schnell
Nachteil: ausländische PLZs, die ggfs. 4stellig sind, können so NICHT abgebildet werden.


Kommentare

Beliebte Posts aus diesem Blog

trunc(sysdate) - nette Spiele mit dem Datum

Zufallszahlen und -text generieren - DBMS_RANDOM

Laufzeiten umrechnen, Sekundenangaben lesbar darstellen