Po pomyślnym uruchomieniu sql w rozwojowej bazie danych.
SQL służy do zmiany typu danych z DATETIME
do TIME
ALTER TABLE SCHEDULER.MV_SCHDL_APPOINTMENT ALTER COLUMN FROM_DT SET DATA TYPE TIME;
Ale w bazie danych wdrażania daje błąd
Błąd podczas przygotowywania 42601 (-104) [IBM] [sterownik CLI] [DB2 / NT] SQL0104N Nieoczekiwany token "TIME" został znaleziony po "ROM_DT SET DATA TYPE". Oczekiwane tokeny mogą zawierać: "". SQLSTATE = 42601
Odpowiedzi:
0 dla odpowiedzi № 1Może to być spowodowane zmianą wersji DB2
Próbowałem następujące kwerendy, aby zmienić typ danych z DATETIME
do 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");
Kroki:
- Utwórz tymczasową kolumnę
- Skopiuj dane do tymczasowej kolumny ze zaktualizowanymi danymi z wybranej kolumny.
- Upuść istniejącą kolumnę.
- Dodaj nową kolumnę z projektem typu danych i nazwą.
- Zaktualizuj nowe dane kolumny za pomocą tymczasowej kolumny
- Upuść tymczasową kolumnę.
Jeśli jesteś w stanie zmienić nazwę kolumny za pomocą zapytania, zmień nazwę kolumny tymczasowej i możesz pominąć kroki 4,5 i 6.
Poniższe zapytanie może być użyte do zmiany nazwy kolumny.
ALTER TABLE SCHEDULER.MV_SCHDL_APPOINTMENT CHANGE TempFromTime FROM_DT TIME;
To dopełnia moje zadanie .. :) ale nie jest to dobry sposób na zrobienie tego.
Wciąż znajduję lepsze rozwiązanie. To rozwiązanie sprawdza się również u mnie.