sql >> Database teknologi >  >> RDS >> Oracle

HVIS FINDER tilstand, der ikke fungerer med PLSQL

IF EXISTS() er semantisk forkert. EXISTS betingelse kan kun bruges i en SQL-sætning. Så du kan omskrive din pl/sql-blok som følger:

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;

Eller du kan blot bruge count funktionen bestemmer antallet af rækker, der returneres af forespørgslen, og rownum=1 prædikat - du behøver kun at vide, om der findes en post:

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;


  1. KONTROLLER begrænsning på fødselsdato?

  2. Forskellige måder at befolke brugerne af MySQL

  3. Hvordan gemmer jeg en streng længere end 4000 tegn i en Oracle-database ved hjælp af Java/JDBC?

  4. Sådan udskiftes en mellemliggende MySQL- eller MariaDB-master med en Binlog-server ved hjælp af MaxScale