Bakground:
我有一个我正在使用的遗留应用程序,它使用DATE类型在数据库中大部分时间存储.我想尝试更新这些表中的一些表,以便它们可以利用时区,因为这会在数据库的不同区域引起用户问题(见下文A).这是针对Oracle 10g的.
我有一个我正在使用的遗留应用程序,它使用DATE类型在数据库中大部分时间存储.我想尝试更新这些表中的一些表,以便它们可以利用时区,因为这会在数据库的不同区域引起用户问题(见下文A).这是针对Oracle 10g的.
Quetions:@H_403_4@
1)我可以迁移这个“到位”.那就是这样我可以转换@H_403_4@
DATE_COL = type:DATE => DATE_COL = type:TIMESTAMP
…或者我将不得不使用不同的列名?@H_403_4@
请记住,数据需要保留.如果这可以在迁移脚本中轻松地完成,它将为我的目的而工作.@H_403_4@
2)这种类型的转换是否向后兼容?我们可能会有一些脚本或报告,这将打击我们可能不知道的这个表.我们可以处理它,但我想知道我正在走哪一种大黄蜂巢.@H_403_4@
3)我应该注意什么陷阱?@H_403_4@
谢谢,@H_403_4@
编辑:
(部分是为了回应加里)@H_403_4@
我很好,有一个多步骤的过程.@H_403_4@
1)通过某种转换将数据移动到新的Timestamp列(caled TEMP)
2)删除旧列(我们称之为MY_DATE)
3)创建具有旧日期列名称(MY_DATE)的新时间戳列
4)将数据移动到MY_DATE列
5)删除TEMP列@H_403_4@
加里还希望澄清具体的时区问题.我从下面复制了我的答案,使其更易于阅读.@H_403_4@
基本上将从几个不同的领域访问数据.我们需要能够根据需要转换到/从本地时区.我们也有触发器使用sysdate进一步复杂的事情.时间戳与时区缓解了这么多痛苦.@H_403_4@
哦,谢谢你的答复.@H_403_4@
解决方法
你可以运行:
ALTER TABLE your_table MODIFY your_date_column TIMESTAMP WITH TIME ZONE;
但是我建议在表中添加TIMESTAMP列,使用UPDATE语句进行填充,如果您选择,则删除原始日期列:@H_403_4@
ALTER TABLE your_table ADD date_as_timestamp TIMESTAMP WITH TIME ZONE; UPDATE your_table SET date_as_timestamp = CAST(date_column AS TIMESTAMP WITH TIME ZONE);
转换向后兼容 – 您可以切换回如你所愿.@H_403_4@