这是查询,我想在oracle中使用带count函数的case语句。
Select case when count(*) > 0 then 'doSomething' else 'doSomething'
from student where student_name='faizan ahmed' and student_father='ahmed' and UPPER(student_dob)=UPPER('01-FEB-19');
请使用plsql代码为我提供帮助。
ORA-00905:缺少关键字 00905. 00000-“缺少关键字”
答案 0 :(得分:2)
为此,请改用exists
:
Select (case when exists (select 1
from student
where student_name = 'faizan ahmed' and
student_father = 'ahmed' and
upper(student_dob) = upper('01-FEB-19');
then 'doSomething'
else 'doSomethingElse'
end)
from dual;
EXISTS
通常比计数更有效,因为它可以停在匹配的第一行,而不是汇总整个表。
答案 1 :(得分:0)
您缺少END
的{{1}}:
CASE
如果您格式化编写的代码,则更容易发现。
除此之外,SELECT CASE WHEN COUNT (*) > 0 THEN
'doSomething'
ELSE 'doSomething'
END --> This
FROM student
WHERE student_name = 'faizan ahmed'
AND student_father = 'ahmed'
AND UPPER (student_dob) = date '2019-02-01' -- No! UPPER ('01-FEB-19');
似乎是一个日期。如果是这样,则不要将其与字符串(因为STUDENT_DOB
是字符串)进行比较,而不是与日期('01-feb-19'
-它是 date文字,由date '2019-02-01'
关键字和date
值)。
此外,您在该日期字符串中使用yyyy-mm-dd
很奇怪,但是您所有的名字都是小写的。嗯?