IF EXISTS condition not working with PLSQL
IF EXISTS()
is semantically incorrect. EXISTS
condition can be used only inside a SQL statement. So you might rewrite your pl/sql block as follows:
declare l_exst number(1);begin select case when exists(select ce.s_regno from courseoffering co join co_enrolment ce on ce.co_id = co.co_id where ce.s_regno=403 and ce.coe_completionstatus = 'C' and ce.c_id = 803 and rownum = 1 ) then 1 else 0 end into l_exst from dual; if l_exst = 1 then DBMS_OUTPUT.put_line('YES YOU CAN'); else DBMS_OUTPUT.put_line('YOU CANNOT'); end if;end;
Or you can simply use count
function do determine the number of rows returned by the query, and rownum=1
predicate - you only need to know if a record exists:
declare l_exst number;begin select count(*) into l_exst from courseoffering co join co_enrolment ce on ce.co_id = co.co_id where ce.s_regno=403 and ce.coe_completionstatus = 'C' and ce.c_id = 803 and rownum = 1; if l_exst = 0 then DBMS_OUTPUT.put_line('YOU CANNOT'); else DBMS_OUTPUT.put_line('YES YOU CAN'); end if;end;
Unfortunately PL/SQL doesn't have IF EXISTS
operator like SQL Server. But you can do something like this:
begin for x in ( select count(*) cnt from dual where exists ( select 1 from courseoffering co join co_enrolment ce on ce.co_id = co.co_id where ce.s_regno = 403 and ce.coe_completionstatus = 'C' and co.c_id = 803 ) ) loop if ( x.cnt = 1 ) then dbms_output.put_line('exists'); else dbms_output.put_line('does not exist'); end if; end loop;end;/