Select 中的案例返回 "missing expression ORA-00905"

Case within a Select returning "missing expression ORA-00905"

这是我第一次post来这里,我想就一个理论上简单的查询寻求帮助。

我正在创建的当前查询是尝试生成一个随机数,该随机数将被识别为偶数或奇数。根据该值,它应该将 "M" 打印为偶数,或将 "W" 打印为奇数。尽管当我尝试在 select 中使用 case 时,我遇到了 "missing keyword" 错误。这是我的以下代码:

select 
  case 
    when mod(round(dbms_random.value(1,100)),2) = 0 then dbms_output.put_line('M');
    when mod(round(dbms_random.value(1,100)),2) = 1 then dbms_output.put_line('W');
  end  
from dual

我已经尝试检查该网站是否存在类似问题,虽然我发现了类似问题并且人们正确地获得了解决方案,但我不太清楚我在这里遗漏了什么。当我 运行 单独 select 时,我得到了我想要得到的偶数或奇数,但当我尝试打印结果时却没有。

为什么要在查询中嵌入 dbms_output?随便写:

select 
  case 
    when mod(round(dbms_random.value(1,100)),2) = 0 then 'M'
    when mod(round(dbms_random.value(1,100)),2) = 1 then 'W'
  end  
from dual

你也知道,因为你调用了 dbms_random 两次不同的时间,你在同一个查询中得到了两个不同的值。如果要比较一个值,则使用 WITH 子句

with rand_value as
( select round(dbms_random.value(1,100)) val from dual
)
select 
  case 
    when mod(val,2) = 0 then 'M'
    when mod(val,2) = 1 then 'W'
  end  
from rand_value

SELECT 语句不能打印,它只能 RETURN 东西。

您可以使用类似

的查询
select
  v,
  case when mod(v, 2) = 0 then 'M' else 'W' end l
from
  (select round(dbms_random.value(1, 100)) v from dual)

并根据需要处理结果(例如打印)。

你因为分号而收到错误。

另外,您调用了随机函数两次,因此得到了两个不同的随机值。我会使用 IF-THEN-ELSE 而不是 SELECT 语句,因为后者无法打印。

IF mod(round(dbms_random.value(1,100)),2) = 0 THEN
    dbms_output.put_line('M');
ELSE
    dbms_output.put_line('W');
END IF;