如何从Dev 6i向Oracle 11g R2的TIMESTAMP类型字段输入数据
解决Dev 6i向Oracle 11g R2 TIMESTAMP字段插入数据的问题
问题根源
Dev 6i搭载的PL/SQL版本偏旧,不支持Oracle 10g及以后推出的TO_TIMESTAMP函数;同时你之前的写法存在冗余(TO_DATE(SYSDATE, ...)中SYSDATE本身就是DATE类型,无需二次转换),最终触发类型不匹配报错。
可行解决方案
直接插入SYSDATE(秒级精度)
TIMESTAMP类型兼容DATE类型,Oracle会自动完成隐式转换,执行以下语句即可:INSERT INTO table(timestamp_column) VALUES(SYSDATE);注意:该方法仅保留秒级精度,无法获取毫秒级数据。
用CAST函数转换为TIMESTAMP(毫秒级精度)
若需要毫秒级时间戳,可通过CAST函数将DATE类型转为TIMESTAMP,Dev 6i支持该函数:INSERT INTO table(timestamp_column) VALUES(CAST(SYSDATE AS TIMESTAMP));此操作会在SYSDATE基础上补全毫秒位(默认值为0)。如果Dev 6i能识别
SYSTIMESTAMP,也可以直接插入当前完整时间戳:INSERT INTO table(timestamp_column) VALUES(SYSTIMESTAMP);字符串转TIMESTAMP(兼容极端旧版本)
若上述方法仍报错,可将当前时间按TIMESTAMP格式拼接成字符串,再通过CAST转换:INSERT INTO table(timestamp_column) VALUES( CAST(TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || '.000000' AS TIMESTAMP) );
内容的提问来源于stack exchange,提问作者Abdul Hameed
相关产品推荐
相关产品推荐

