IF문은 말그대로 JAVA같은 타 언어에서 사용하던 조건문이랑 똑같은 기능을 한다.
조건에 맞으면 작성한 코드를 실행하고
틀리다면 작성한 다른 코드를 실행하는 구문
데이터 결과랑 출력 구문인 DBMS_OUTPUT이랑 틀릴것입니다. 제가 ~~팀 입니다를 귀찮아서 안찾고 막 적었습니다.
SET SERVEROUTPUT ON; SELECT * FROM dept; -- 부서 번호를 통해 팀 이름 출력과 위치 SELECT deptname, loc FROM dept WHERE deptno = 1; CREATE OR REPLACE PROCEDURE dept_find(v_no IN NUMBER) IS v_dept dept%ROWTYPE; BEGIN SELECT loc INTO v_dept.loc FROM dept WHERE deptno = v_no; IF v_no = 1 THEN DBMS_OUTPUT.PUT('세일즈 팀'); END IF; IF v_no = 2 THEN DBMS_OUTPUT.PUT('인사 팀'); END IF; IF v_no = 3 THEN DBMS_OUTPUT.PUT('배송 팀'); END IF; IF v_no = 4 THEN DBMS_OUTPUT.PUT('개발 1팀'); END IF; IF v_no = 5 THEN DBMS_OUTPUT.PUT('개발 2팀'); END IF; DBMS_OUTPUT.PUT_LINE('위치 : '||v_dept.loc); END; / EXEC dept_find(3);
IF ELSE 문
SET SERVEROUTPUT ON; -- 부서 번호에 따라 세일즈 팀인지 아닌지를 출력 -- sales_find(v_no) -- 테이블 : dept SELECT * FROM dept; CREATE OR REPLACE PROCEDURE sales_find(v_no IN NUMBER) IS v_dept dept%ROWTYPE; BEGIN SELECT deptname INTO v_dept.deptname FROM dept WHERE deptno = v_no; IF v_dept.deptname = 'sales' THEN DBMS_OUTPUT.PUT_LINE(v_no||'은 세일즈팀 입니다.'); ELSE IF DBMS_OUTPUT.PUT_LINE(v_no||'은 세일즈팀이 아닙니다.'); END IF; END; / EXEC sales_find(2); -- 조건에 없는 번호가 나왔을 경우 '해당 데이터가 없습니다.' 출력 -- JAVA에선 예외처리하면 되지만 DB에선?? CREATE OR REPLACE PROCEDURE sales_find2(v_no IN NUMBER) IS v_dept dept%ROWTYPE; BEGIN IF v_no = 1 THEN DBMS_OUTPUT.PUT_LINE(v_no||'은 세일즈팀 입니다.'); ELSE IF v_no >= 2 THEN IF v_no <= 5 THEN DBMS_OUTPUT.PUT_LINE(v_no||'은 세일즈팀 아닙니다.'); ELSE DBMS_OUTPUT.PUT_LINE('올바른 숫자를 입력해주세요.'); END IF; ELSE DBMS_OUTPUT.PUT_LINE('올바른 숫자를 입력해주세요.'); END IF; END IF; END; / EXEC sales_find2(-1); -- IF안에 IF를 넣는것도 가능
ELS IF 문
SET SERVEROUTPUT ON; -- IF로 만든 프로시저를 ELSE IF로 변경 -- dept_find SELECT name, text FROM USER_SOURCE WHERE name = 'DEPT_FIND'; -- 만들어 둔 프로시저 소스 확인 -- 부서 번호를 통해 팀 이름 출력과 위치 SELECT deptname, loc FROM dept WHERE deptno = 1; CREATE OR REPLACE PROCEDURE dept_findels(v_no IN NUMBER) IS v_dept dept%ROWTYPE; BEGIN SELECT loc INTO v_dept.loc FROM dept WHERE deptno = v_no; IF v_no = 1 THEN DBMS_OUTPUT.PUT('세일즈 팀'); ELSIF v_no = 2 THEN DBMS_OUTPUT.PUT('인사 팀'); ELSIF v_no = 3 THEN DBMS_OUTPUT.PUT('배송 팀'); ELSIF v_no = 4 THEN DBMS_OUTPUT.PUT('개발 1팀'); ELSIF v_no = 5 THEN DBMS_OUTPUT.PUT('개발 2팀'); END IF; DBMS_OUTPUT.PUT_LINE('위치 : '||v_dept.loc); END; / EXEC dept_findels(2);
위의 코드
SELECT name, text FROM USER_SOURCE WHERE name = 'DEPT_FIND';
위와 같이 USER_SOURCE를 조회하여 확인할 수 있다.
또는
좌측에서 프로시저 항목을 보여주는데 클릭하면 위와같이 보여준다.
'Oracle DB 11g > 03.PL SQL' 카테고리의 다른 글
[DB]03-08.Oracle DB PLSQL 커서, CURSOR (0) | 2018.10.11 |
---|---|
[DB]03-07.Oracle DB PLSQL LOOP, WHILE, FORLOOP 반복문 (0) | 2018.10.11 |
[DB]03-05.Oracle DB PLSQL Procedure(Insert, Update, Delete 예제) (0) | 2018.10.10 |
[DB]03-04.Oracle DB PLSQL Function (0) | 2018.10.10 |
[DB]03-03.Oracle DB PLSQL %ROWTYPE (0) | 2018.10.10 |