更新: のコンストラクターへの「1 秒の端数」パラメーターは、Timestamp
実際にはナノ秒かかります... 100 分の 1 秒であると推測し、低い値は四捨五入されました。参考までに質問を残しました....
Oracle の C++ ライブラリである OCCI に苦労しています。要約すると:
- オブジェクトを作成
Timestamp
し、それらが 100 分の 1 秒単位で適切であることを確認します (ただし、もっと多くのことが必要です!) stmt.setTimestamp
thenを使用して、マイクロ秒を保持する列executeUpdate()
に挿入しますTIMESTAMP(6)
- Oracle SQL Developer で行を選択する: 秒未満のコンポーネントは常に 0-ed
14-JUL-11 06.03.27.000000000
です。
問題
1 秒未満の精度が必要です。うまくいけばマイクロ秒です。サーバーでその精度を取得するために多くの作業を行っており、分析のために (少なくともその一部は) 必要です。
詳細
Timestamp
年/月/日の時/分/秒/ミリ秒から 作成し、最後の秒を100分の1秒に減らします。これはコンストラクターがサポートしているようです。(私が見つけることができる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 ala14-JUL-11 06.03.27.000000000
です。
どんな洞察も大歓迎です!
(関連する場合は、MSVC++ 2005、Oracle 10.2.0.4 SDK、SQL Developer 3.0.04 を使用します。他に関連するものがあるかどうかを尋ねてください)。
ありがとう、トニー