IF EXISTS condition not working with PLSQL

前端 未结 2 1380
醉酒成梦
醉酒成梦 2020-11-27 18:47

I am trying to print the TEXT when condition is TRUE. The select code is perfectly working fine. It\'s showing 403 value when i only run select code. But I have to print som

相关标签:
2条回答
  • 2020-11-27 18:50

    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;
    /
    
    0 讨论(0)
  • 2020-11-27 18:56

    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;
    
    0 讨论(0)
提交回复
热议问题