ОБНОВЛЕНИЕ: Параметр "доли секунды" конструктора Timestamp
на самом деле занимает наносекунды... Я предположил, что это сотые доли секунды, и мои низкие значения были округлены. Вопрос оставлен для справки....
Я борюсь с библиотекой Oracle C++ - OCCI. Вкратце:
- создание
Timestamp
объектов и проверка их исправности с точностью до сотых долей секунды (хотя хотелось бы большего!) - используя
stmt.setTimestamp
, затемexecuteUpdate()
для вставки в столбецTIMESTAMP(6)
, который должен сохранять микросекунды - выбор строки в Oracle SQL Developer: компонент доли секунды всегда равен 0, например.
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 — спросите, может ли что-то еще быть уместным).
Спасибо, Тони