Я пытаюсь получить доступ к записи PostgreSQL из Oracle через ODBC, возникает серьезная проблема, когда я пытаюсь прочитать поле метки времени, теряется точность времени в микросекундах. Например: 2018-01-25 12:40:20.123456 в PostgreSQL будет 2018-01-25 12:40:20.000000 в Oracle. Чтобы убедиться, я написал PL/SQL для проверки данных, почему-то все микросекундные цифры были потеряны.
В документации говорится о параметре строки подключения BTD - BIND TIMESTAMP AS DATE ссылка
По умолчанию этот параметр должен иметь значение FALSE.
Привязать TIMESTAMP как DATE (строка подключения BTD)
Добавлен новый параметр подключения, Bind TIMESTAMP as DATE, который позволяет привязать тип данных SQL_TIMESTAMP драйвера ODBC к типу данных Oracle DATE, а не к типу данных Oracle TIMESTAMP (который используется по умолчанию).
Вот мой PL/SQL:
declare
v_timestamp timestamp(6);
begin
select max("MODIFIED_ON") into v_timestamp from "public"."DAS_ITEM"@PG_LINK;
dbms_output.put_line(v_timestamp);
end;
Результат: 19/JAN/18 08:59:42.000000 AM , пропущены микросекунды, все 6-значные доли секунды заменены на ноль.
С другой стороны, на моем PostgreSQL результат 2018-01-19 08:59:42.695166
Я также тестировал isql
, он возвращает значение метки времени с полной точностью, как следствие, я считаю, что основная причина исходит от Oracle.