Oracle OCCI stmt.setTimestamp插入TIMESTAMP(6):微秒始终为0

时间:2011-07-14 10:03:29

标签: c++ oracle timestamp occi

UPDATE:Timestamp构造函数的“一小部分”参数实际上需要纳秒......我猜测它是百分之一秒,我的低值被舍去了。问题留待参考....

我正在努力使用Oracle的C ++库--OCCI。概括地:

  • 创建Timestamp个对象并验证它们对百分之一秒的好处(虽然我想要更多!)
  • 使用stmt.setTimestamp然后executeUpdate()插入应保留微秒的TIMESTAMP(6)
  • 在Oracle SQL Developer中选择行:亚秒组件始终为0-eg,例如14-JUL-11 06.03.27.000000000

问题

我需要亚秒精度 - 希望微秒!我们已经投入大量精力来捕获服务器中的精度,并且需要(至少一部分)用于分析。

详细

我从年/月/日小时/分钟/秒/毫秒创建Timestamp,将最后一个减少到百分之一秒,因为这似乎是构造函数支持的。 (我找不到Oracle文档指定解释,但在fromText示例中,“xff”明确对应于要转换的值中的“。##”百分位后缀。{{1}的重点是什么如果你不能插入它们,支持6个小数位?)

TIMESTAMP(6)

此处,oracle::occi::Timestamp temp = oracle::occi::Timestamp(_env, year, month, day, hour, minute, second, millisecond / 10); // re-extract the broken-down time from temp to prove it's stored successfully int ye; unsigned mo, da, ho, mi, se, fs; temp.getDate(ye, mo, da); temp.getTime(ho, mi, se, fs); return temp; 按预期获得毫秒/ 10的值。

我在下面使用它:

fs

字段11是oracle::occi::Timestamp ts; ts = _pImpl->makeOracleTimestamp(p->ATETimeStamp); stmt.setTimestamp(11, ts);

在Oracle SQL Developer中选择行,timestamp列的其他部分是正确的,但是亚秒组件是0-ed ala TIMESTAMP(6)

非常感谢任何见解!

(如果相关,使用MSVC ++ 2005,Oracle 10.2.0.4 sdk,SQL Developer 3.0.04 - 请询问是否有其他相关内容。)

谢谢, 贝

1 个答案:

答案 0 :(得分:3)

结果显示“小数秒”字段名义上是纳秒而不是百分之一。我希望甲骨文在他们的文件中说出来!我名义上说,如果它确实保留了最不重要的数字,那么我所拥有的百分之一的数值将会出现几个纳秒,我可能会立即猜到这个问题 - 而不是它似乎值<无论如何都会丢失100纳秒(也许更大 - 我没有探测到截止点)。

感谢任何看过这个问题或尝试过一些研究/调查的人。