【问题标题】:Oracle CTE failing in one computerOracle CTE 在一台计算机上失败
【发布时间】:2019-07-24 11:21:04
【问题描述】:

我在 Microsoft Query 中创建了要使用 VBA 在 Excel 中运行的查询。

它们在不同的计算机上工作,但有一台计算机不工作。

在那台计算机上,除了使用 CTE 的查询之外,查询仍然有效。

正常的查询如下:

SELECT
  TBL.COL
FROM
  DB.TBL TBL;

但是当它有如下子查询(CTE)时:

WITH
  SUBQUERY AS (
    SELECT
      TBL.COL
    FROM
      DB.TBL TBL
  )
SELECT
  SUBQUERY.COL
FROM
  SUBQUERY;

它运行但不检索任何数据。

它甚至不会像它工作时那样显示列名,而是返回 0 条记录。

查询显示警告消息:

SQL 查询无法以图形方式表示。还要继续吗?

这是正常的,在任何电脑上都会显示,但之后还会显示另一条警告信息:

SQL 语句执行成功。

仅在该计算机不工作时出现。

我需要能够将它们用于我所做的查询。

使用临时表可能可行,但我没有尝试所需的权限。

我尝试使用inline views,但他们复制了数据。

【问题讨论】:

  • 我不知道原因,但是 WITH 中的查询选择不正确。应该像 SELECT SUBQUERY.COL FROM SUBQUERY。否则你应该得到 ORA-00904 错误。 oracle-base.com/articles/misc/with-clause
  • @sandyv 是的,这是从真实名称转换为简化名称的拼写错误,已修复。
  • 它可以在一台客户端计算机上运行,​​而不能在另一台计算机上运行?只是一个猜测,但我会说 Microsoft Query 正在通过 ODBC 连接到 Oracle,并且无法正常工作的客户端计算机安装了过时版本的 Oracle 客户端。
  • @MatthewMcPeak 我刚刚检查过,驱动程序的版本是 8.01.07.00(2000 年 5 月 11 日的 Oracle ODBC 驱动程序),而我的是 11.02.00.01(2010 年 4 月 2 日的 Oracle in OraClient11g_home1)。我会要求他更新。如果你想写一个答案,我会在检查它是否有效后接受它。谢谢。

标签: sql oracle oracle11g common-table-expression ms-query


【解决方案1】:

我在 Microsoft Query 中创建了要在 Excel 中使用 VBA 运行的查询。 ...但是有一台计算机无法正常工作。

直到数据库第 9 版才引入通用表表达式(即WITH 子句)。由于涉及到 ODBC(Microsoft Query),因此您遇到这种情况的最可能原因是无法运行的计算机安装了过时的(9 之前的)版本的 Oracle 客户端。

比较运行正常的客户端计算机和不运行的客户端计算机之间的 Oracle 客户端安装,以了解是否是这种情况。如果是,请在有问题的机器上升级 Oracle 客户端。

【讨论】:

    【解决方案2】:

    我认为你可以使用...

    SELECT
      SUBQUERY.COL
    FROM
      (
        SELECT
          TBL.COL AS COL --or (TBL.COL COL) or ( COL ) #if not duplicate with any
        FROM
          DB.TBL TBL
      ) SUBQUERY;
    

    【讨论】:

      猜你喜欢
      • 2014-02-11
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 2012-06-26
      相关资源
      最近更新 更多