Oracle SQL ORA-00907: CASE 语句中缺少右括号错误

Posted

技术标签:

【中文标题】Oracle SQL ORA-00907: CASE 语句中缺少右括号错误【英文标题】:Oracle SQL ORA-00907: missing right parenthesis error in CASE statement 【发布时间】:2014-06-03 18:33:25 【问题描述】:

我正在使用 select 子句中的以下 CASE 语句执行查询:

select (case instr(listagg(D.first_name, ',') 
    within group (order by D.first_name), ',')
when 0 
then substr(listagg(D.first_name, ',') 
    within group (order by D.first_name), 1)
else substr(listagg(D.first_name, ',') 
    within group (order by D.first_name), 1, instr(listagg(D.first_name, ',') 
    within group (order by D.first_name), ',') - 1) end) Advisor1FName
from ....

SQL Developer 引发 ORA-00907 缺少右括号错误。

出了什么问题?任何帮助将不胜感激。

【问题讨论】:

看起来不错。您可以尝试将其全部替换为 * 并再次尝试确保我们看到的减法有问题 可能在case 末尾缺少end @Jens 抱歉,“end”关键字可能在复制时消失了。查询中确实存在“end”,并且存在同样的问题。 我正在回滚您的编辑。添加“已解决”并且您的问题的解决方案不是 *** 的工作方式(它是一个“问答”网站,这意味着在标记为“您的答案”的空间中发布一个问题,然后回答它)。如果您想将解决方案发布给未来的读者,您可以post a self-answer;你甚至可以自己接受它是正确的。 :-) 【参考方案1】:

通过将整个 listagg 函数括在括号中来解决。奇怪的是它们是必需的,但这就是解决问题的方法。

所以,

substr(listagg(D.first_name, ',') 
    within group (order by D.first_name), 1)

变成

substr((listagg(D.first_name, ',') 
    within group (order by D.first_name)), 1)

【讨论】:

以上是关于Oracle SQL ORA-00907: CASE 语句中缺少右括号错误的主要内容,如果未能解决你的问题,请参考以下文章

在 oracle SQL 中使用 insrt 函数遇到“ORA-00907:缺少右括号”

Oracle SQL ORA-00907: CASE 语句中缺少右括号错误

在 oracle 10g 中出现错误 .. 错误:- ORA-00907:缺少右括号

我在 Oracle Apex ORA-00907 上遇到错误:缺少右括号

[转]ORA-00907: 缺失右括号

ORA-00907: 缺失右括号问题整理解决