Условие FALSE - это когда count()
не больше нуля.Так что ЛОЖЬ, когда записей не найдено .Следовательно, NULL - это правильный результат, потому что gr_number
равно нулю (записей не найдено), поэтому max(gr_number)
равно нулю, а max(gr_number)+1
равно нулю.
Не уверен, что вы пытаетесь достичь, но вот одно решение, которое вернет значение, если вы не найдете конкретного учащегося:
Select coalesce(s.student_id, g.gr_number+1) as student_id
from (select 1 as rn, max(gr_number) as gr_number
from student ) g
left outer join
( select rownum as rn, student_id
from student
where student_name ='faizan ahmed'
and email_id='abc@gmail.com'
and UPPER(student_dob)=UPPER('01-FEB-19')
and rownum = 1 ) s
on s.rn = g.rn
;