복붙노트

[SQL] IF는 조건이 PLSQL 작동하지 EXISTS

SQL

IF는 조건이 PLSQL 작동하지 EXISTS

나는 조건이 TRUE 일 때 텍스트를 인쇄하려합니다. 선택 코드는 완벽하게 잘 작동한다. 난 단지 선택의 코드를 실행할 때 (403) 값을 보여주는 것. 하지만 조건이 존재할 때 텍스트를 인쇄 할 수 있습니다. 어떤 코드를 다음의 문제입니다.

BEGIN
IF 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 CO.C_ID = 803
)
THEN
    DBMS_OUTPUT.put_line('YES YOU CAN');
END;

다음은 오류 리포트 :

Error report:
ORA-06550: line 5, column 1:
PLS-00103: Encountered the symbol "JOIN" when expecting one of the following:

   ) , with group having intersect minus start union where
   connect
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

해결법

  1. ==============================

    1.IF는 (은) 의미 잘못 존재한다. 조건 만 SQL 문 내에서 사용할 수있는 존재한다. 당신이 당신의 PL / SQL 블록을 다시 할 수 있도록 다음과 같이 :

    IF는 (은) 의미 잘못 존재한다. 조건 만 SQL 문 내에서 사용할 수있는 존재한다. 당신이 당신의 PL / SQL 블록을 다시 할 수 있도록 다음과 같이 :

    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;
    

    또는 당신은 단순히 쿼리에 의해 반환되는 행의 수를 확인 할 수 기능을 사용할 수 있으며, ROWNUM = 1 조건 - 당신은 단지 기록이 존재하는지 알 필요가 :

    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;
    
  2. ==============================

    2.불행하게도 PL / SQL은 IF가 SQL Server와 같은 연산자 존재하지 않습니다. 하지만 당신은 이런 식으로 뭔가를 할 수 :

    불행하게도 PL / SQL은 IF가 SQL Server와 같은 연산자 존재하지 않습니다. 하지만 당신은 이런 식으로 뭔가를 할 수 :

    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;
    /
    
  3. from https://stackoverflow.com/questions/13217600/if-exists-condition-not-working-with-plsql by cc-by-sa and MIT license