1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 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할때 문자를 적어야해서 이 방법은 못 씁니다... 도와주세요
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 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; / |