【问题标题】:OLEDB error ORA-01861OLEDB 错误 ORA-01861
【发布时间】:2016-06-30 14:03:53
【问题描述】:

我通过 Qlikview 连接到 pl/sql (oracle),对于同一个脚本,我使用 ODBC 连接并且脚本运行没有问题,但是当我使用 OLEDB 连接时,我收到错误 ORA-01861: literal does不匹配格式字符串。我的问题主要是为什么我的脚本可以使用 ODBC 连接而不是 OLEDB?

添加代码,因为我想让我的查询与 OLE DB 连接兼容...下面是发生挂断的地方...

SELECT DISTINCT B.CLT_CLT_PGMID,TO_CHAR(B.FIRST_PHONE_CONTACT,'MM/DD/YYYY') AS FIRST_PHONE_CONTACT,
                        ABS(TO_DATE(B.FIRST_ASSGN_DT, 'DD-MM-YYYY') - TO_DATE(B.FIRST_PHONE_CONTACT, 'DD-MM-YYYY')) AS FIRST_Contacted_By_Phone_Days

         FROM (
                SELECT DISTINCT MIN(SERVICE_DATE) AS FIRST_PHONE_CONTACT
                                   ,a.FIRST_ASSGN_DT, a.FIRST_CONTACT_DT, d.is_visit, d.attempt_or_contact,a.PERS_GEN_KEY,a.CLIENT_PROGRAM,a.clt_clt_pgmid

                  FROM  A
                    LEFT JOIN   D ON A.CLT_CLT_PGMID = D.CLT_CLT_PGMID AND A.ID_CARD = D.ID_CARD

                    WHERE 1=1
                   rownum <10

                      GROUP BY  a.FIRST_ASSGN_DT, a.FIRST_CONTACT_DT, d.is_visit, d.attempt_or_contact,a.PERS_GEN_KEY,a.CLIENT_PROGRAM,a.clt_clt_pgmid
                                                                                                                                                         ) B

下面是发生错误的地方 ABS(TO_DATE(B.FIRST_ASSGN_DT, 'DD-MM-YYYY') - TO_DATE(B.FIRST_PHONE_CONTACT, 'DD-MM-YYYY')) AS FIRST_Contacted_By_Phone_Days

【问题讨论】:

  • 请提供代码sn-p!
  • 您使用哪些驱动程序?来自 Microsoft 或 Oracle 的驱动程序?
  • 对于 OLEDB 连接 Oracle Provider for OLEDB 会产生字符串错误。对于使用 Microsoft 的 ODBC
  • 现在我想修正我的错误。下面的代码在客户端工作,但通过 OLE DB 连接时会产生错误。
  • 我找到了正确的语法:ABS(B.FIRST_ASSGN_DT - B.FIRST_PHONE_CONTACT) AS FIRST_Contacted_By_Phone_Days

标签: oracle odbc oledb qlikview


【解决方案1】:

在你的电脑上看看这个:

对于 OLE DB,它说:

无法使用 ALTER SESSION SET NLS_DATE_FORMAT 命令设置 Oracle 会话的日期格式。在 Visual Basic 中,日期格式由 Windows 控制面板中的区域设置属性控制。有关 Visual Basic 日期格式的详细信息,请参阅您的 Visual Basic 文档。

对于 OLE DB 的 Oracle Provider,如果 Connection 属性 UseSessionFormat 为 FALSE,这是一个默认值,则提供程序将会话的 NLS_DATE_FORMAT 固定为 'YYYY-MM-DD HH24:MI:SS' .如果将日期作为字符串传递给 Oracle 数据库,则日期必须采用“YYYY-MM-DD HH24:MI:SS”格式。如果 UseSessionFormat 为 TRUE,则 Oracle Provider for OLE DB 不会修复 NLS_DATE_FORMAT,而是使用默认会话 NLS_DATE_FORMAT。

ODBC 的行为可能有所不同。

【讨论】:

  • 这对我有帮助,因为我没有意识到可能会有不同的行为。现在我想更新我的查询以解决问题
【解决方案2】:

理想情况下,两者都应该工作。请参考Post

  • ODBC 仅提供对关系数据库的访问
  • OLE DB 提供以下功能
    • 无论数据格式或位置如何,均可访问数据
  • 完全访问 ODBC 数据源和 ODBC 驱动程序

因此,OLE DB 似乎通过 ODBC 驱动程序层与基于 SQL 的数据源进行交互。

【讨论】:

  • 很好的答案只是它不回答问题
猜你喜欢
  • 2014-04-27
  • 1970-01-01
  • 2016-04-02
  • 2020-07-20
  • 2017-08-24
  • 2014-09-30
  • 2022-10-15
  • 1970-01-01
  • 2021-10-26
相关资源
最近更新 更多