PLSQL 제어문,반복문, IF, LOOP, END LOOP, FOR LOOP, WHILE LOOP, PL/SQL동영상, 자바학원, 오라클학원, JAVA학원, ORACLE학원
http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=708
ojc.asia
PLSQL 제어문,반복문, IF, LOOP, END LOOP, FOR LOOP, WHILE LOOP, PL/SQL동영상
오라클 PL/SQL
제어문, 반복문
강의 : 이종철
PL/SQL IF문
[형식]
IF condition1 THEN
Condition1이 만족하는 경우 실행할 문장
ELSIF condition2 THEN
Condition2가 만족하는 경우 실행할 문장
ELSE
이외의 경우 실행할 문장
END IF;
-- EMP 테이블에서 이름을 입력받아 급여가 3000보다 크면 'high sal'
-- 2000보다 크면 'mid sal' 그밖에는 'low sal'을 출력하는 프로시저를 작성하세요.
SQL> SET SERVEROUTPUT ON
SQL> CREATE OR REPLACE PROCEDURE OJC16(v_ename emp.ename%TYPE)
IS
v_sal emp.sal%TYPE;
BEGIN
SELECT sal INTO v_sal
FROM EMP
WHERE ename = v_ename;
IF v_sal >= 3000 THEN
DBMS_OUTPUT.PUT_LINE('high sal...');
ELSIF v_sal >= 2000 THEN
DBMS_OUTPUT.PUT_LINE('mid sal...');
ELSE
DBMS_OUTPUT.PUT_LINE('low sal...');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND OR TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('Data 추출에러');
END;
/
프로시저가 생성되었습니다.
SQL> exec ojc16('SMITH')
low sal...
SQL> exec ojc16('KING')
high sal...
SQL> exec ojc16('없는사원')
Data 추출에러
BASIC LOOP문
- LOOP~END LOOP 형태이며 무한루프이므로 출구가 있어야 한다.(EXIT or EXIT WHEN절)
- LOOP COUNTER 변수 등은 직접 다루어야 한다.
[형식]
LOOP
실행문장;
END LOOP;
-- LOOP ~ END LOOP, EXIT 이용한 예제
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
x number := 10;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(x);
x := x - 1;
IF x < 1 THEN
EXIT;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE('x = ' || x);
END;
/
10
9
8
…
1
x = 0
-- LOOP ~ END LOOP, EXIT WHEN 이용한 예제
SQL> DECLARE
x number := 10;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(x);
x := x - 1;
EXIT WHEN x < 1;
END LOOP;
DBMS_OUTPUT.PUT_LINE('x = ' || x);
END;
/
10
9
8
…
1
x = 0
FOR LOOP문
- LOOP~END LOOP 앞에 FOR 제어문을 가지므로 루프 카운터 변수가 필요없고 LOOP~END LOOP 안쪽에 출구 역시 필요없다.
- 인덱스는 자동으로 선언되며 자동으로 1씩 증가하고 REVERSE라고 하면 상한값에서 초기값으로 -1씩 증가한다.(초기값과 상한값의 위치가 바뀌어서는 안된다.)
[형식]
FOR 인덱스 IN [REVERSE] 초기값 .. 상한값 LOOP
실행문장;
END LOOP;
-- FOR LOOP예제
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
BEGIN
FOR x IN 1..10 LOOP
DBMS_OUTPUT.PUT_LINE(x);
END LOOP;
END;
/
1
…
10
-- FOR LOOP예제(REVERSE)
SQL> DECLARE
BEGIN
FOR x IN REVERSE 1..10 LOOP
DBMS_OUTPUT.PUT_LINE(x);
END LOOP;
END;
/
10
9
…
WHILE LOOP문
- 조건이 만족하는 동안 LOOP~END LOOP를 실행하므로 별도의 출구는 필요없지만 루프 카운터 변수등은 선언해서 사용해야 한다.
- 조건에 만족하지 않으면 반복문내 실행문이 한번도 실행되지 않는다.
[형식]
WHILE 조건 LOOP
실행문장;
END LOOP;
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
x NUMBER := 10;
BEGIN
WHILE(x > 0) LOOP
DBMS_OUTPUT.PUT_LINE(x);
x := x - 1;
END LOOP;
DBMS_OUTPUT.PUT_LINE('x = ' || x);
END;
/
10
9
…
1
x = 0