Posts

Es werden Posts vom Oktober, 2018 angezeigt.

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

Hidden Columns "entdecken" - ORA-54032

Ab Oracle 12(?) kann es passieren, dass über die "extended statistics" unsichtbare Spalten angelegt werden. Um zu prüfen, ob es hidden columns gibt, für die entsprechende Tabelle dieses SQL abfragen: select table_name, column_name, data_default, hidden_column  from   user_tab_cols where  hidden_column = 'YES' order  by table_name; Bei Spaltenänderungen, die zu einem ORA-54032 führen, prüfen, ob und welche hidden columns angelegt wurden. Durch exec dbms_stats.drop_extended_stats(user, 'TBL', '(a, b)'); werden alle entsprechenden Spalten gelöscht und die Spalte kann geändert werden. Beachten: user_tabl_cols liefert: ("a","b") drop_extended_stats benötigt: '(a,b)' Man beachte die verschiedenen Hochkomma...