Folgende SQL wird erfolgreich in der Entwicklungsdatenbank ausgeführt.
SQL dient zum Ändern des Datentyps von DATETIME
zu TIME
ALTER TABLE SCHEDULER.MV_SCHDL_APPOINTMENT ALTER COLUMN FROM_DT SET DATA TYPE TIME;
In der Deployment-Datenbank gibt es jedoch Fehler
Fehler beim Vorbereiten 42601 (-104) [IBM] [CLI-Treiber] [DB2 / NT] SQL0104N Ein unerwarteter Token "TIME" wurde nach "ROM_DT SET DATA TYPE" gefunden. Erwartete Token können Folgendes enthalten: "". SQLSTATE = 42601
Antworten:
0 für die Antwort № 1Vielleicht liegt es an der Versionsänderung von DB2
Ich habe versucht, mit folgenden Abfragen den Datentyp zu ändern DATETIME
zu TIME
ALTER TABLE SCHEDULER.MV_SCHDL_APPOINTMENT ADD COLUMN TempFromTime TIME ;
CALL SYSPROC.ADMIN_CMD ("reorg table SCHEDULER.MV_SCHDL_APPOINTMENT");
UPDATE SCHEDULER.MV_SCHDL_APPOINTMENT SET TempFromTime =CAST(FROM_DT AS TIME);
ALTER TABLE SCHEDULER.MV_SCHDL_APPOINTMENT DROP COLUMN FROM_DT;
ALTER TABLE SCHEDULER.MV_SCHDL_APPOINTMENT ADD COLUMN FROM_DT TIME ;
CALL SYSPROC.ADMIN_CMD ("reorg table SCHEDULER.MV_SCHDL_APPOINTMENT");
UPDATE SCHEDULER.MV_SCHDL_APPOINTMENT SET FROM_DT=TempFromTime ;
ALTER TABLE SCHEDULER.MV_SCHDL_APPOINTMENT DROP COLUMN TempFromTime;
CALL SYSPROC.ADMIN_CMD ("reorg table SCHEDULER.MV_SCHDL_APPOINTMENT");
Schritte:
- Temporäre Spalte erstellen
- Daten in temporäre Spalte mit aktualisierten Daten aus der gewünschten Spalte kopieren.
- Vorhandene Spalte löschen
- Fügen Sie eine neue Spalte mit Design-Datentyp und -namen hinzu.
- Aktualisieren Sie neue Spaltendaten mit einer temporären Spalte
- Temporäre Spalte löschen
Wenn Sie die Spalte per Abfrage umbenennen können, benennen Sie die temporäre Spalte um und können die Schritte 4,5 und 6 überspringen.
Die folgende Abfrage kann zum Umbenennen der Spalte verwendet werden.
ALTER TABLE SCHEDULER.MV_SCHDL_APPOINTMENT CHANGE TempFromTime FROM_DT TIME;
Es erledigt meine Aufgabe.
Ich finde immer noch die bessere Lösung. Diese Lösung funktioniert auch für mich.