ОБНОВЛЕНИЕ: параметр «доля секунды» для конструктора 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 остальные части столбца метки времени являются правильными, но второстепенный компонент имеет нулевое значение 14-JUL-11 06.03.27.000000000
.
Любое понимание высоко ценится!
(При необходимости, используя MSVC ++ 2005, Oracle 10.2.0.4 sdk, SQL Developer 3.0.04 - пожалуйста, спросите, может ли что-то быть уместным).
Спасибо,
Tony