sql - Oracle 数据库错误 907:ORA-00907:缺少右括号
问题描述
我直接从 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 无法连接到数据源。Oracle 数据库错误 907:ORA-00907:缺少右括号
这让我完全被难住了,不知道该怎么做。非常感谢任何帮助或建议。我更担心缺少右括号而不是连接不良。
解决方案
AS
从FROM
子句中删除。Oracle 不承认这一点。
另外,这个条件:
b.DISPOSITION_LINE_NUM in (NULL, 1)
不做你所期望的。b.DISPOSITION_LINE_NUM
如果is ,它永远不会评估为 true NULL
。
您应该将其替换为:
(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;
这没有括号。 所以它不能返回那个特定的错误。
推荐阅读
- python - 谷歌表格 API,python。如何访问特定的单元格数据
- python - 如何比较 2 个 Excel 工作表并提取共同值?
- firebase - 如何在 Firestore 字符串字段中执行查询以匹配多个值?
- apache-kafka - Kafka 是消息队列还是消息代理?
- azure - 移动应用程序使用 Azure VPN 本地连接到后端
- amazon-web-services - AWS Quicksight parseJson 函数不适用于红移
- sql - 多级 CTE 表达式会减慢执行速度(重新发布并进行更改)
- android - 列表中的项目数据更改时未观察到 LiveData 更改
- javascript - 如何在打字稿中动态分配类型?
- vuejs2 - 带有跳过/启用的计算参数