使用 if 时缺少右括号

Posted

技术标签:

【中文标题】使用 if 时缺少右括号【英文标题】:missing right parenthesis when using if 【发布时间】:2020-07-28 08:36:59 【问题描述】:

我正在尝试在 sql developer (Oracle) 中使用简单的 IF 查询,但出现“缺少右括号”错误。我想从我的表TEST_TABLE 中写下所有ID,如果ID 是1234,则写yes,否则写'no'。我做错了什么?

select id, if(id = 1234, 'yes', 'no') from TEST_TABLE t

【问题讨论】:

【参考方案1】:

那里不能使用 IF(IF 用于 PLSQL 代码中的控制流,而不是查询),请改用 CASE WHEN:

select id, CASE WHEN id = 1234 THEN 'yes' ELSE 'no' END as idIs1234 from TEST_TABLE t

case when 的基本形式是:

CASE 
  WHEN test THEN truevalue 
 [WHEN othertest THEN othertruevalue] 
 [ELSE falsevalue ]
END

CASE 必须执行一个或多个测试,每个测试都返回一个值。如果没有大小写匹配(所有测试都是假的)并且没有 ELSE 子句,则返回 null。

还有一种形式可以测试单个变量与各种值是否相等:

CASE id WHEN 1234 THEN 'yes1' WHEN 2345 THEN 'yes2' ELSE 'no' END 

【讨论】:

谢谢,它有效。我什么时候可以使用 IF,它与 CASE WHEN 有什么区别? 简单来说“你只能在存储过程中使用IF,来选择执行哪组代码语句”

以上是关于使用 if 时缺少右括号的主要内容,如果未能解决你的问题,请参考以下文章

执行 Oracle Ad Hoc 查询时绑定参数出错; ORA-00907: 缺少右括号

创建表“缺少右括号”时出错 [重复]

错误:在 Oracle 上创建索引时缺少右括号

SQL 错误:ORA-00907:缺少右括号 00907。00000 -“缺少右括号”

错误报告 - ORA-00907: 缺少右括号 00907. 00000 - “缺少右括号

ORA-00907: 缺少右括号 -- 奇怪