오라클 프로시저 if문 질문 0 2 1,552

by tamayo [PL/SQL] 오라클 프로시저 선택조건 [2018.11.26 16:03:52]


CREATE OR REPLACE procedure prac1(
v_empno in sale.empno%type,
v_salecount in sale.salecount%type)

IS

EX_TEST EXCEPTION;
EX_TEST2 EXCEPTION;
EX_TEST3 EXCEPTION;

begin

IF v_empno not between '1' and '5' then
RAISE EX_TEST;

ELSIF ?????????????? then
RAISE EX_TEST2;

ELSIF v_salecount not between '0' and '100' then
RAISE EX_TEST3;

ELSE
insert into sale
values (v_empno,to_char(sysdate,'yyyy-mm-dd'),v_salecount);
update totsale 
set totalsalecount = totalsalecount+v_salecount
where empno = v_empno;
dbms_output.put_line('정상처리 되었습니다.');

END IF;

exception 

WHEN EX_TEST THEN
dbms_output.put_line('없는 사원번호입니다.');
WHEN EX_TEST2 THEN
dbms_output.put_line('퇴사한 사원번호입니다.');
WHEN EX_TEST3 THEN
dbms_output.put_line('판매 대수에 에러가 있습니다.');
WHEN OTHERS THEN
dbms_output.put_line('기타에러 : ' || SQLERRM);

end prac1;

 

begin에서 if문 사용시

 

if 조건 then 반환

 

이렇게 쓰잖아요 근데 제가 구현해야할게 퇴사여부(근무,퇴사)를 판별해서 

exception으로 넘겨야하는 상황인데 조건에 어떻게 써야 테이블안에있는 문자열인 근무,퇴사를 판별해서

exception으로 넘길 수 있을까요?

 

v_firekind in saleman.firekind%type을 쓰면 쉽게 할 수 있는데

그러면 execute할때 문자를 적어야해서 이 방법은 못 씁니다... 도와주세요

by 마농 [2018.11.27 08:43:52]
CREATE OR REPLACE PROCEDURE prac1
( v_empno     IN sale.empno%TYPE
, v_salecount IN sale.salecount%TYPE
)
IS
    ex_test     EXCEPTION;
    v_err       VARCHAR2(100);
    v_status    emp.status%TYPE;
BEGIN
    BEGIN
        SELECT   status
          INTO v_status
          FROM emp
         WHERE empno = v_empno
        ;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            v_err := '없는 사원번호입니다.';
            RAISE ex_test;
        WHEN OTHERS THEN
            v_err := '사원 조회 에러 : (' || SQLCODE ||')'|| SQLERRM;
            RAISE ex_test;
    END;
    IF v_status = '퇴사' THEN
        v_err := '퇴사한 사원번호입니다.';
        RAISE ex_test;
    END IF;
    IF v_salecount IS NULL OR v_salecount NOT BETWEEN 1 AND 100 THEN
        v_err := '판매 대수에 에러가 있습니다.';
        RAISE ex_test;
    END IF;
    BEGIN
        INSERT INTO sale
        VALUES (v_empno, TO_CHAR(sysdate, 'yyyy-mm-dd'), v_salecount)
        ;
        UPDATE totsale 
           SET totalsalecount = totalsalecount + v_salecount
         WHERE empno = v_empno
        ;
    EXCEPTION
        WHEN OTHERS THEN
            v_err := '판매 처리 에러 : (' || SQLCODE ||')'|| SQLERRM;
            RAISE ex_test;
    END;
    dbms_output.put_line('정상처리 되었습니다.');
EXCEPTION
    WHEN ex_test THEN
        dbms_output.put_line(v_err);
    WHEN OTHERS THEN
        dbms_output.put_line('기타 에러 : (' || SQLCODE ||')'|| SQLERRM;
END prac1;
/

 


by tamayo [2018.11.27 15:32:14]

이미 문제를 해결했지만 답변 정말 감사합니다!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입