gpt4 book ai didi

c++ - Oracle OCCI stmt.setTimestamp 插入 TIMESTAMP(6) : microseconds always 0

转载 作者:太空狗 更新时间:2023-10-29 21:28:33 25 4
gpt4 key购买 nike

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

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

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

问题

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

详情

我从年/月/日小时/分钟/秒/毫秒创建了一个时间戳,将最后一秒减少到百分之一秒,因为这似乎是构造函数所支持的。 (我找不到任何 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 - 请询问是否还有其他相关信息)。

谢谢,托尼

最佳答案

事实证明,“小数秒”字段名义上以纳秒为单位,而不是百分之一。我希望 Oracle 会在他们的文档中这样说!我名义上说是因为如果它真的保留了最低有效数字,那么我所拥有的百分之一的值会以纳秒的形式出现,我可能会立即猜到这个问题——相反,似乎 < 100 纳秒的值无论如何都会丢失(也许更大 - 我还没有探查过分界点)。

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

关于c++ - Oracle OCCI stmt.setTimestamp 插入 TIMESTAMP(6) : microseconds always 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6691456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com