Hallo,
wie kann ich mit SQL in der Datenbank ORACLE eine Spalte umbennen oder löschen?
BlueskyRW
Hallo,
wie kann ich mit SQL in der Datenbank ORACLE eine Spalte umbennen oder löschen?
BlueskyRW
Auszug aus der Online-Dokumentation
You can rename a column using the CREATE TABLE command with the AS clause. For example, the following
statement re-creates the table STATIC, renaming a column from OLDNAME to NEWNAME:
CREATE TABLE temporary (newname, col2, col3)
AS SELECT oldname, col2, col3 FROM static
DROP TABLE static
RENAME temporary TO static;
**Hi,
hat nicht geklappt!**
====================================================
_SQL> CREATE TABLE temporary (newname, col2, col3)
2 AS SELECT ID, col2, col3 from mitarbeiter
3 DROP TABLE mitarbeiter
4 RENAME temporary TO mitarbeiter;
DROP TABLE mitarbeiter
*
FEHLER in Zeile 3:
ORA-00933: SQL-Befehl wurde nicht korrekt beendet
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hi,
hat nicht geklappt
====================================================
SQL> CREATE TABLE temporary (newname, col2, col3)
2 AS SELECT ID, col2, col3 from mitarbeiter
3 DROP TABLE mitarbeiter
4 RENAME temporary TO mitarbeiter;
DROP TABLE mitarbeiter
*
FEHLER in Zeile 3:
ORA-00933: SQL-Befehl wurde nicht korrekt beendetSQL>
You can rename a column using the CREATE TABLE command with
the AS clause. For example, the following
statement re-creates the table STATIC, renaming a column from
OLDNAME to NEWNAME:CREATE TABLE temporary (newname, col2, col3)
AS SELECT oldname, col2, col3 FROM static
DROP TABLE static
RENAME temporary TO static;
wennst nach jedem kommand strichpunkte setzt gehts:
CREATE TABLE temporary (newname, col2, col3)
AS SELECT ID, col2, col3 from mitarbeiter;
DROP TABLE mitarbeiter;
RENAME temporary TO mitarbeiter;
Im übrigen mußt Du darauf achten eventuell vorhandene constraints und indices nach dem rename neu zu erstellen (die alten schmeißt Oracle mitsamt der tabelle weg).
Im übrigen gibt´s auch die (inoffizielle) Möglichkeit das ganze „hardcore“ in der datenbank zu ändern (Oracle speichert das datenbankschema in der datenbank selbst), aber das heißt herumpfuschen in den systemtables und ist nicht sehr zu empehlen (außerdem können sich die systemtabellen versionsabhängig ändern)
Gruß,
Martin
Dumme Frage, aber fehlt dir nicht einfach der Strichpunkt am Ende der einzelnen Befehle?
Grüße, Robert
in oracle kann man generell keine spalten umbennen
oder löschen. die einzige möglichkeit wäre:
genau das ist der vorschlag der vorgänger
1.
CREATE TABLE temporary (newname, col2, col3)
AS SELECT ID, col2, col3 from mitarbeiter;
2.
DROP TABLE mitarbeiter;
3.
RENAME temporary TO mitarbeiter;
natürlich musst du es auf deine tabelle anpassen
jf
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Leider falsch - geht doch (ab 8i)
in oracle kann man generell keine spalten umbennen
oder löschen:
Stimmt nicht. Seit 8i kann man mit
ALTER TABLE tabelle
DROP COLUMN spalte;
Spalten löschen. Anschließend fügt man mit
ALTER TABLE tabelle
ADD (Spaltendefinition);
eine neue Zeile ein.
Auf diese Art und Weise hat man dann wesentlich weniger Serverbelastung.
Gruß JStefan
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
PS:
Nur zur Info - mit
ALTER TABLE tabelle
SET UNUSED (spalte);
kann man eine oder mehrere Spalten auf unused setzen. Auf diese Spalte(n) kann ab sofort nicht mehr zugegriffen werden - die Spalte ist quasi gelöscht. Im Gegensatz zum DROP COLUMN ist hier die Antwortzeit und die I/O-Belastung minimal, da die Spalte physikalisch noch vorhanden ist. Diese Möglichkeit sollte man einsetzen, wenn (betriebsbedingt) die Serverleistung momentan nicht sinken darf, aber niemand mehr auf die Spalte zugreifen soll.
Zu einem späteren Zeitpunkt (Samstag Nacht) kann man dann mit
ALTER TABLE tabelle
DROP UNUSED COLUMNS;
die Spalte(n) physikalisch löschen. Aber Vorsicht: SET UNUSED kann man nicht rückgängig machen.