我试图通过ODBC从Oracle访问PostgreSQL记录,当我尝试读取时间戳字段时存在严重问题,时间精度(以微秒为单位)已丢失。例如:在PostgreSQL中 2018-01-25 12:40:20.123456 将在Oracle中 2018-01-25 12:40:20.000000 。为了确保,我已经编写PL / SQL来检查数据,不知何故,所有微秒数字都已丢失。
有一个文档讨论连接字符串的参数 BTD - BIND TIMESTAMP作为日期 link
默认情况下,此参数应为“FALSE”
将TIMESTAMP绑定为DATE(BTD连接字符串)
添加了新的连接选项,将TIMESTAMP绑定为DATE,允许您将ODBC驱动程序SQL_TIMESTAMP数据类型绑定到Oracle DATE数据类型而不是Oracle TIMESTAMP数据类型(这是默认值)。
这是我的PL / SQL:
isql
结果是: 19 / JAN / 18 08:59:42.000000 AM ,它缺少微秒,所有6位数的第二部分已被替换为零。
另一方面,在我的PostgreSQL上,结果是“2018-01-19 08:59:42.695166”
我也测试了MyAnnotations
,它以完整的精度返回时间戳值,因此,我认为主要原因来自Oracle。
答案 0 :(得分:1)
Oracle DATE数据类型不支持几分之一秒。你需要使用TIMESTAMP。这也适用于PostgreSQL时间戳进入的任何表列或PL / SQL数据类型;如果时间戳在某处传递到DATE,则会截断几分之一秒。