Oracle SQL中的可怕的“缺少右括号”错误

时间:2018-10-12 14:58:44

标签: sql oracle

我们通过Web应用程序访问Oracle数据库。 Web应用程序是在站点外发布,托管和管理的。 Web应用程序的一个组件是仪表板,仪表板使用SQL定期从系统返回数据,然后显示这些仪表板,并在达到某些阈值时触发警报。

SQL在仪表板设置中分配了几个参数:LOCATION,OWNER_DEPT,USING_DEPT和DAYS_AHEAD,它们似乎正常工作。这是查询:

SELECT * FROM
(
SELECT DISTINCT 
"MFIVE"."VIEW_WORK_REQ_OCC"."UNIT_NO" AS "UNIT NO", "MFIVE"."VIEW_WORK_REQ_OCC"."WORK_REQ_NO" AS "WORK REQ NO", "MFIVE"."VIEW_WORK_REQ_OCC"."JOB" AS "JOB", 
CASE WHEN "MFIVE"."VIEW_WORK_REQ_OCC"."DUE_DATE" IS NULL THEN NULL ELSE ("MFIVE"."VIEW_WORK_REQ_OCC"."DUE_DATE") END AS "DUE DATE", 
CASE WHEN "MFIVE"."VIEW_WORK_REQ_OCC"."FIRST_DATE" IS NULL THEN NULL ELSE ("MFIVE"."VIEW_WORK_REQ_OCC"."FIRST_DATE") END AS "FIRST DATE", 
CASE WHEN "MFIVE"."VIEW_WORK_REQ_OCC"."LAST_DATE" IS NULL THEN NULL ELSE ("MFIVE"."VIEW_WORK_REQ_OCC"."LAST_DATE") END AS "LAST DATE"
FROM "MFIVE"."VIEW_WORK_REQ_OCC"
WHERE
("MFIVE"."VIEW_WORK_REQ_OCC"."MNT_PREVENTIVE_FL" = 'Y') AND
(UPPER("MFIVE"."VIEW_WORK_REQ_OCC"."LOCATION") LIKE UPPER(CONCAT(CONCAT('%', ':<LOCATION>'), '%'))) AND
(UPPER("MFIVE"."VIEW_WORK_REQ_OCC"."OWNER_DEPT") LIKE UPPER(CONCAT(CONCAT('%', ':<OWNER_DEPT>'), '%'))) AND
(UPPER("MFIVE"."VIEW_WORK_REQ_OCC"."USING_DEPT") LIKE UPPER(CONCAT(CONCAT('%', ':<USING_DEPT>'), '%'))) AND
("MFIVE"."VIEW_WORK_REQ_OCC"."DUE_DATE" >= SYSDATE + ':<DAYS_AHEAD>')
ORDER BY 
"MFIVE"."VIEW_WORK_REQ_OCC"."UNIT_NO" ASC, 
"MFIVE"."VIEW_WORK_REQ_OCC"."JOB" ASC, 
CASE WHEN "MFIVE"."VIEW_WORK_REQ_OCC"."DUE_DATE" IS NULL THEN NULL ELSE         ("MFIVE"."VIEW_WORK_REQ_OCC"."DUE_DATE") END AS "DUE DATE" ASC
)

问题出在涉及“ MFIVE”,“ VIEW_WORK_REQ_OCC”,“ DUE_DATE”的语句上。我们尝试仅返回DUE_DATE大于SYSDATE加上DAYS_AHEAD参数中的值的值。删除这些行可以使查询正确执行。保持原样返回错误ORA-00907:缺少右括号。

大多数SQL是从Web应用程序的临时报告组件生成的SQL中提取的。报告运行正常,但是我们无法通过临时报告模块传递参数。对原始文件的修改是添加绑定变量。

我希望有人可以指出正确的方向来解决此问题。感谢您的协助。

1 个答案:

答案 0 :(得分:0)

感谢考希克·纳亚克(Kaushik Nayak)帮助我看了树林的树木。

更正仅影响ORDER BY子句:

...
ORDER BY 
"MFIVE"."VIEW_WORK_REQ_OCC"."UNIT_NO" ASC, 
"MFIVE"."VIEW_WORK_REQ_OCC"."JOB" ASC, 
)