/ / Zmiana typu danych z DateTime na Time w DB2 daje błąd - sql, db2

Zmiana typu danych z DateTime na Time w DB2 daje błąd - sql, db2

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 № 1

Moż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:

  1. Utwórz tymczasową kolumnę
  2. Skopiuj dane do tymczasowej kolumny ze zaktualizowanymi danymi z wybranej kolumny.
  3. Upuść istniejącą kolumnę.
  4. Dodaj nową kolumnę z projektem typu danych i nazwą.
  5. Zaktualizuj nowe dane kolumny za pomocą tymczasowej kolumny
  6. 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.