3

更新:构造函数的“秒的分数”参数Timestamp实际上需要纳秒......我猜它是百分之一秒,我的低值被四舍五入了。问题留给参考....

我正在努力使用 Oracle 的 C++ 库 - OCCI。总结:

  • 创建Timestamp对象并在百分之一秒内验证它们是否有效(尽管我想要更多!)
  • 使用stmt.setTimestampthenexecuteUpdate()插入TIMESTAMP(6)应该保留微秒的列
  • 在 Oracle SQL Developer 中选择行:亚秒组件始终为 0-ed,例如14-JUL-11 06.03.27.000000000.

问题

我需要亚秒级精度 - 希望是微秒级!我们已经投入了大量工作来在我们的服务器中捕获这种精度,并且需要(至少其中一些)它进行分析。

细节

我从年/月/日创建了一个Timestamp小时/分钟/秒/毫秒,将最后一个秒减少到百分之一秒,因为这似乎是构造函数所支持的。 (我找不到任何 Oracle 文档指定解释,但在fromText示例中,“xff”显然对应于要转换的值中的“.##”百分位后缀。TIMESTAMP(6)如果您不能插入它们,那么支持 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;

在这里,fs按预期获取毫秒/10 值。

我将其用于:

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

其中字段 11 是TIMESTAMP(6).

在 Oracle SQL Developer 中选择行,时间戳列的其他部分是正确的,但亚秒组件是 0-ed ala 14-JUL-11 06.03.27.000000000

任何见解都非常感谢!

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

谢谢,托尼

4

1 回答 1

3

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

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

于 2011-07-15T06:03:41.860 回答