오라클 프로시저 goto문 질문 입니다. 2 1,942

by 유환 [Oracle 기초] goto [2023.10.30 22:51:24]


goto 문을 쓰지 않다고 어디서 쓴것을 보고 예제를 만들어 봤는대요

제가 생각한것과 다른 결과가 나와서 질문 드립니다.

0으로 나누기 때문에 에러가 날것이고 GOTO error_end; 로 가게 했습니다.

근대  <[[ ucess_end ]] 블럭도 실행이 되는게 이해가 안 갑니다. 

 실패 일때는  [[ error_end ]]   여기민 성공이면  [[ sucess_end]]  여기만 가게 하려면 어떻게 해야 하나요? 할수는 있는건가요???

 

 
DECLARE
   out1 varchar2(7000);
   out2 varchar2(7000);
BEGIN
   TEST1('C1234', out1, out2);
 dbms_output.put_line(out1 || ':' ||out2);
END ;

 

CREATE OR REPLACE PROCEDURE C##SCOTT.TEST1
(
    PEMPNM   IN VARCHAR2  ,
    O_MSG1   OUT VARCHAR2,
    O_retmsg  OUT VARCHAR2 
)

IS

V_EMPNO  NUMBER ;
update_cnt VARCHAR2(700)   := NULL;  --메시지없음

BEGIN

      O_MSG1 := NULL;

    SELECT NVL(MAX(EMPNO),0) + 1  INTO V_EMPNO FROM  EMP ;

    DBMS_OUTPUT.PUT_LINE('EMPNO:'|| V_EMPNO);

    BEGIN
         INSERT INTO  EMP
         (
          EMPNO
         ,ENAME
         )
         VALUES
         (
           V_EMPNO/0 -- 오루 밠애
          ,PEMPNM
         );
         
          EXCEPTION
              WHEN OTHERS THEN
                  O_MSG1 := 'insert err [' || SQLCODE || '] ' || SQLERRM || $$PLSQL_LINE;
                  O_retmsg := 'eeee' ;
                   GOTO error_end;
       end;          

      update_cnt := SQL%ROWCOUNT;

    IF SQL%ROWCOUNT > 0  THEN
      DBMS_OUTPUT.PUT_LINE('update_cnt:'||update_cnt);
    goto sucess_end;
      
    ELSE
      DBMS_OUTPUT.PUT_LINE('update_cnt:'||update_cnt);
    END IF;

   O_retmsg := V_EMPNO;
   
     [[error_end]]
        DBMS_OUTPUT.PUT_LINE('__ error_end 111111 : '|| to_char(sysdate,'YYYYMMDDHH24MISS'));
        DBMS_OUTPUT.PUT_LINE('__ error_end 222222 : '|| to_char(sysdate,'YYYYMMDDHH24MISS'));
        ROLLBACK;
   
    [[sucess_end]]
       DBMS_OUTPUT.PUT_LINE('__ error_end 333333 : '|| to_char(sysdate,'YYYYMMDDHH24MISS'));
     
 COMMIT;
   
    EXCEPTION
        WHEN OTHERS THEN
        BEGIN
            O_MSG1 := 'ERR_MST[' || SQLCODE || '] ' || SQLERRM || $$PLSQL_LINE;
            O_retmsg := 'eeee222222' ;
        END;
 END test1;

 

 

https://velog.io/@aljongjong/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%ED%95%84%EA%B8%B0-%EC%A0%95%EB%A6%AC
https://m.blog.naver.com/wook2124/222102990691