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;
这是我第一次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;