Oracle数据库错误907:ORA-00907:缺少右括号

问题描述 投票:0回答:1

我直接从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
1个回答
1
投票

AS子句中删除FROM。 Oracle无法识别。

此外,此条件:

 b.DISPOSITION_LINE_NUM in (NULL, 1)

不做您期望的事情。如果b.DISPOSITION_LINE_NUMNULL,则永远不会得出true。

您应将其替换为:

 (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;

注意:

  • 用户有意义的表别名,而不是任意字母(使用缩写)。
  • 请勿在as子句中使用FROM
  • 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;

这没有括号。因此,它无法返回该特定错误。

© www.soinside.com 2019 - 2024. All rights reserved.