选择返回"缺少表达式ORA-00905"

时间:2017-11-14 15:38:07

标签: oracle plsql plsqldeveloper

这是我在这里发表的第一篇文章,我想就一个理论上简单的查询寻求帮助。

我创建的当前查询是尝试生成一个随机数,该数字将被识别为偶数或奇数。根据该值,它应该打印" M"甚至,或者" W"奇怪的。虽然当我尝试在选择内部使用案例时,我得到了"缺少关键字"错误。这是我的以下代码:

<pre>
.htaccess
#Checking if module is avalaible
<IfModule mod_rewrite.c>
   #Using the rewrite engine
   RewriteEngine On
   RewriteBase /folder/ /*location address if localhost localhost/project */
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME} !-f
   #Rewrite rule to redirect the request
   RewriteRule ^(.*)$ web/$1 [QSA,L]
<IfModule>
</pre>

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

3 个答案:

答案 0 :(得分:1)

为什么要尝试在查询中嵌入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

答案 1 :(得分:1)

SELECT语句不能PRINT,它只能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)

并按照您的意愿处理结果(例如打印)。

答案 2 :(得分:0)

由于分号,您收到错误。

此外,您正在调用随机函数两次,从而获得两个不同的随机值。我会使用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;