You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Oracle中将DATE转为DATETIME时的ORA-22858报错

报错原因
  • Oracle 18c 不存在内置的DATETIME数据类型,该类型是MySQL、SQL Server等其他数据库的专属类型,Oracle中存储带时间的日期数据的类型为DATE(精度到秒)和TIMESTAMP(精度最高到纳秒),你语句中指定的目标类型不被Oracle识别。
  • 即便将目标类型替换为Oracle支持的TIMESTAMP,直接使用ALTER TABLE ... MODIFY语句修改已有数据的DATE类型列,也属于Oracle不允许的直接类型变更场景,因此触发ORA-22858: invalid alteration of datatype报错。
正确转换方案

如果需要实现其他数据库DATETIME的等效能力,Oracle中使用TIMESTAMP类型即可,小表场景可按以下步骤操作:

  1. 新增临时TIMESTAMP列
ALTER TABLE APPOINTMENT_ldr ADD ApptDateTime_TMP TIMESTAMP;
  1. 迁移原列数据到临时列,显式转换避免隐式转换风险
UPDATE APPOINTMENT_ldr SET ApptDateTime_TMP = CAST(ApptDateTime AS TIMESTAMP);
COMMIT;
  1. 删除原有DATE类型的旧列

注意:如果原ApptDateTime列存在索引、非空约束或者其他关联约束,需要先删除对应约束和索引,再执行删列操作

ALTER TABLE APPOINTMENT_ldr DROP COLUMN ApptDateTime;
  1. 将临时列重命名为原列名
ALTER TABLE APPOINTMENT_ldr RENAME COLUMN ApptDateTime_TMP TO ApptDateTime;

如果是生产环境大表,不想长时间锁表影响业务,可以使用Oracle的DBMS_REDEFINITION包做在线重定义完成转换。

内容的提问来源于stack exchange,提问作者carlos931

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:45:04