MS Access 对 Oracle VIA ODBC 的直通查询

Posted

技术标签:

【中文标题】MS Access 对 Oracle VIA ODBC 的直通查询【英文标题】:MS Access pass-through query to Oracle VIA ODBC 【发布时间】:2016-08-02 08:19:27 【问题描述】:

我正在尝试在 MS Access 中创建传递查询。该查询通过 ODBC 连接到 Oracle DB。

我的查询在 SQL Developer 中运行良好,但它包含 CASE (...) END 构造。 正如我发现here 有一个Oracle ODBC 驱动程序的问题end 解释这个词。我得到一个错误。

有没有办法解决这个问题?

我的查询:

SELECT
  CASE
    WHEN PHORGEN.NR_wniosku LIKE 'PHR%'
    THEN 'text1'
    WHEN PHORGEN.NR_wniosku LIKE 'PBR%'
    THEN 'text2'
    ELSE 'text3'
  END field1,
  CASE
    WHEN PHORGEN.NR_wniosku IS NULL
    THEN reklcomp.solution_date
    ELSE
      CASE
        WHEN phorsol.OPIS_ROZWIAZANIA = '3'
        THEN rekldet.SOLUTION_SENDING_DATE
        ELSE NVL(
          (SELECT MIN(DATA_KSIEGOWANIA)
          FROM phorbook
          WHERE POWOD_KSIEGOWANIA = '1'
          AND Nr_Wniosku          = PHORGEN.Nr_Wniosku
          ),rekldet.SOLUTION_SENDING_DATE)
      END
  END field2
FROM rgen
JOIN reklcomp
ON rgen.UIDINSTANCEID = reklcomp.UIDINSTANCEID
JOIN rekldet
ON rgen.UIDINSTANCEID = rekldet.UIDINSTANCEID
JOIN reklclient
ON rgen.UIDINSTANCEID = reklclient.UIDINSTANCEID
LEFT JOIN phorgen
ON RGEN.NR_WNIOSKU = PHORGEN.NUMER_OAR
LEFT JOIN phorsol
ON PHORGEN.UIDINSTANCEID = phorsol.UIDINSTANCEID

【问题讨论】:

向我们展示查询,我们可以帮助以其他方式编写它,而不使用case end 我已经编辑了问题并添加了查询。 答案有帮助吗? 是的,这很有帮助,但我找到了另一个更简单的解决方案,请检查我添加的答案。 是的,我看到了。看起来很棒! 【参考方案1】:

您也可以使用解码功能。

我不熟悉 ORACLE SQL,但我已经搜索了一段时间,我认为它应该可以工作。

SELECT
    DECODE(SUBSTR(PHORGEN.NR_wniosku, 1, 3) 
                        , 'PHR', 'text1'
                        , 'PBR', 'text2'
                        , 'text3') field1

    , DECODE(PHORGEN.NR_wniosku 
                , NULL, reklcomp.solution_date
                , DECODE(phorsol.OPIS_ROZWIAZANIA
                            , '3', rekldet.SOLUTION_SENDING_DATE
                            , NVL((SELECT MIN(DATA_KSIEGOWANIA)
                                  FROM phorbook
                                  WHERE POWOD_KSIEGOWANIA = '1'
                                  AND Nr_Wniosku = PHORGEN.Nr_Wniosku
                                  ),rekldet.SOLUTION_SENDING_DATE))) field2
FROM rgen
JOIN reklcomp
ON rgen.UIDINSTANCEID = reklcomp.UIDINSTANCEID
JOIN rekldet
ON rgen.UIDINSTANCEID = rekldet.UIDINSTANCEID
JOIN reklclient
ON rgen.UIDINSTANCEID = reklclient.UIDINSTANCEID
LEFT JOIN phorgen
ON RGEN.NR_WNIOSKU = PHORGEN.NUMER_OAR
LEFT JOIN phorsol
ON PHORGEN.UIDINSTANCEID = phorsol.UIDINSTANCEID

【讨论】:

【参考方案2】:

我找到了解决方案。这非常简单:) Oracle ODBC 驱动程序不允许在查询中在单词END 之后使用分号。所以我删除了传递查询定义中的分号,它起作用了! 谢谢各位小伙伴的解答。

【讨论】:

以上是关于MS Access 对 Oracle VIA ODBC 的直通查询的主要内容,如果未能解决你的问题,请参考以下文章

MS-Access ODBC 连接到 Oracle for SQL

MS Access 客户端:在 Oracle 表中存储文档

如何从 Oracle 访问 MS Access 数据库?

使用 pass through query 从 ms access 访问 oracle 数据库表

MS Access 更新 Oracle 数据库 - 查询问题

java中MS Access的驱动程序