Hallo Leute,
einige Änderungen in einer Application haben ergeben, dass ein VARCHAR2(10) nun ausschliesslich Zahlen enthält.
Wie kann ich diese Spalte mit VARCHAR2 in eine Spalte NUMBER(6) convertieren
Danke
Andi
Hallo Leute,
einige Änderungen in einer Application haben ergeben, dass ein VARCHAR2(10) nun ausschliesslich Zahlen enthält.
Wie kann ich diese Spalte mit VARCHAR2 in eine Spalte NUMBER(6) convertieren
Danke
Andi
Hi,
einige Änderungen in einer Application haben ergeben, dass ein
VARCHAR2(10) nun ausschliesslich Zahlen enthält.
Sind auch keine Altdaten drin, die nichtnumerische Werte enthalten?
Wie kann ich diese Spalte mit VARCHAR2 in eine Spalte
NUMBER(6) convertieren
Je nach Version. Einmal ganz einfach:
alter table nix modify zahl number(6);
Wenn die zu verändernde Spalte schon Daten enthält und diese auch noch erhalten bleiben sollen, geht das nur über einen Umweg:
SQL\> alter table nix add zahl2 number(6);
Tabelle wurde geändert.
SQL\> update nix set zahl2=to\_number(zahl);
4711 Zeilen wurden aktualisiert.
SQL\> commit;
Transaktion mit COMMIT abgeschlossen.
SQL\> alter table nix drop column zahl;
Tabelle wurde geändert.
SQL\> alter table nix rename column zahl2 to zahl;
Tabelle wurde geändert.
Das setzt aber Oracle 9i, Release 2 voraus.
Gruß
Sancho
Hi Andi,
iirc: ALTER TABLE tabname MODIFY COLUMN…
Grüßt: Guido
Hi Andi,
welchen Vorteil soll die Änderung haben?
IMHO sollte in einem Number Feld wirklich nur Daten stehen mit denen man mathematische Operationen in der DB oder in der Applikation durchführt. (Von der Identify Spalte mal abgesehen)
Gruss
Quaser
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hi Sancho!
SQL> alter table nix add zahl2 number(6);
[…]
SQL> alter table nix rename column zahl2 to zahl;
Tabelle wurde geändert.
Das setzt aber Oracle 9i, Release 2 voraus.
Bin zu faul das jetzt auszuprobieren, aber ich denke das geht auch schon unter 8i, oder?
Gruß
Martin
Mahlzeit,
SQL> alter table nix rename column zahl2 to zahl;
Tabelle wurde geändert.
Das setzt aber Oracle 9i, Release 2 voraus.Bin zu faul das jetzt auszuprobieren, aber ich denke das geht
auch schon unter 8i, oder?
Ich bin auch zu faul
Nach dieser Site ist das erst ab 9i möglich:
http://www.techonthenet.com/sql/tables/alter_table.htm
Gruß
Sancho
Hi Sancho!
Ich bin auch zu faul
Nach dieser Site ist das erst ab 9i möglich:
http://www.techonthenet.com/sql/tables/alter_table.htm
Hast Recht (hab’s jetzt doch noch ausprobiert). Unter 8i muss man das ganze also überhaupt über eine Zwischentabelle machen (Tipp an den Nutzer: Constraints und Indices nicht vergessen!)
In etwa so:
create table temp (primary\_key number(9), zahl number(9));
insert into temp (primary\_key, zahl) select primary\_key, to\_number(zahl) from nix;
alter table nix drop column zahl;
alter table nix add (zahl number(9));
update nix a set a.zahl=(select b.zahl from temp b where a.primary\_key=b.primary\_key);
drop table temp;
Unter 8.0.x gibt’s dann den „drop column“ auch nicht mehr, da müsste man die ganze Tabelle nix in einer temporären Tabelle zwischenspeichern, droppen und neu anlegen.
Gruß
Martin