在开发数据库中成功执行了sql。
SQL用于将数据类型从DATETIME
更改为TIME
ALTER TABLE SCHEDULER.MV_SCHDL_APPOINTMENT ALTER COLUMN FROM_DT SET DATA TYPE TIME;
但在部署数据库中,它会出错
准备期间出现错误42601(-104)[IBM] [CLI驱动程序] [DB2 / NT] SQL0104N 在“ROM_DT SET DATA TYPE”之后发现了意外的令牌“TIME”。 预期的代币可能包括:“”。 SQLSTATE = 42601
答案 0 :(得分:0)
嘿,可能是因为DB2的版本更改
我尝试过以下查询,将数据类型从DATETIME
更改为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');
步骤:
如果您能够通过查询重命名列,则可以重命名临时列,并可以跳过第4,5步和第6步。
以下查询可用于重命名列。
ALTER TABLE SCHEDULER.MV_SCHDL_APPOINTMENT CHANGE TempFromTime FROM_DT TIME;
它完成了我的任务.. :)但这不是那么好的方法。
我仍然在寻找更好的解决方案。这个解决方案也适用于我。