【问题标题】:Oracle database error 907: ORA-00907: missing right parenthesisOracle 数据库错误 907:ORA-00907:缺少右括号
【发布时间】:2020-01-20 01:50:56
【问题描述】:

我直接从 SQL 开发人员那里转移了这段代码。在那里完美运行。

SELECT 
    a.INCIDENT_NUMBER,
    a.DETAILED_DESCRIPTION,    
    a.INCIDENT_ROOT_CAUSE

FROM 
    N_EVALUATION as a

INNER JOIN N_DISPOSITION as b
    ON (a.INCIDENT_NUMBER = b.INCIDENT_NUMBER) 

WHERE
    b.DISPOSITION_LINE_NUM in (NULL, 1) AND
    a.ACTIVE_FLAG = 'Y' AND
    b.ACTIVE_FLAG = 'Y' AND
    a.DETAILED_DESCRIPTION IS NOT NULL

但是,当我将完全相同的代码传输到 Tableau 以创建自定义 SQL 查询时。它给了我一个错误;

与数据源通信时出错。坏的 连接:Tableau 无法连接到数据源。甲骨文 数据库错误 907: ORA-00907: 缺少右括号

这让我完全被难住了,不知道该怎么做。非常感谢任何帮助或建议。我更关心缺少右括号而不是连接不良。

【问题讨论】:

  • 您发布的查询没有不平衡的括号。请参阅下面的详细信息,但根据我推断的意图,代码不能“完美”地工作。
  • 从子句中删除为关键字

标签: sql oracle tableau-api


【解决方案1】:

FROM 子句中删除AS。 Oracle 不承认这一点。

另外,这个条件:

 b.DISPOSITION_LINE_NUM in (NULL, 1)

不符合您的预期。如果b.DISPOSITION_LINE_NUMNULL,它永远不会评估为真。

您应该将其替换为:

 (b.DISPOSITION_LINE_NUM IS NULL OR b.DISPOSITION_LINE_NUM = 1)

否则,您的查询看起来像是带有平衡括号,但您应该将其写为:

SELECT e.INCIDENT_NUMBER, e.DETAILED_DESCRIPTION, e.INCIDENT_ROOT_CAUSE
FROM N_EVALUATION e JOIN
     N_DISPOSITION d
     ON e.INCIDENT_NUMBER = d.INCIDENT_NUMBER
WHERE (d.DISPOSITION_LINE_NUM IS NULL OR d.DISPOSITION_LINE_NUM = 1) AND
      e.ACTIVE_FLAG = 'Y' AND
      d.ACTIVE_FLAG = 'Y' AND
      e.DETAILED_DESCRIPTION IS NOT NULL;

注意事项:

  • 用户有意义的表别名而不是任意字母(这使用缩写)。
  • 不要在FROM 子句中使用as
  • 小心NULL 比较。

最后,你原来的查询相当于:

SELECT e.INCIDENT_NUMBER, e.DETAILED_DESCRIPTION, e.INCIDENT_ROOT_CAUSE
FROM N_EVALUATION e JOIN
     N_DISPOSITION d
     ON e.INCIDENT_NUMBER = d.INCIDENT_NUMBER
WHERE d.DISPOSITION_LINE_NUM = 1 AND
      e.ACTIVE_FLAG = 'Y' AND
      d.ACTIVE_FLAG = 'Y' AND
      e.DETAILED_DESCRIPTION IS NOT NULL;

这没有括号。所以它不能返回那个特定的错误。

【讨论】:

  • 现在速度非常快!!甚至不到1分钟。向你致敬@gordon!!
  • 你好戈登,谢谢你的回复。我已经修改了我的查询,但不幸的是仍然得到相同的错误代码。
  • 再次感谢@GordonLinoff,但错误仍然存​​在。棘手的问题。
  • @ARJ 。 . .我修改了答案。问题是FROM 子句中的as。我不知道为什么这会在任何 Oracle 查询中起作用。
  • @ARJ 。 . .它更容易键入并且完全等效。我知道刚接触 SQL 的人更喜欢明确表达。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 2016-10-23
相关资源
最近更新 更多