PL/SQL 4: 커서(CURSOR), 반복문(FOR문)

plsql4

화면 출력 기능을 활성화
SET SERVEROUTPUT ON;

화면출력
DBMS_OUTPUT.PUT_LINE(vno || ‘텍스트’ || vname);

&는 입력값(오라클은 데이터 내에 &를 쓸 수 없다)

WHERE empno= ‘&empno’;

으로 쓰면 사용자의 입력값을 받는다.

:=는 할당연산자

:= 를 쓰면 ‘주소에 값을 집어넣겠다’는 뜻이다.

사용자 정의형 변수

1. 변수
 스칼라변수(오라클의 일반변수) : CHAR, VARCHAR2…
 참조변수
 (1) %TYPE  (2) %ROWTYPE  (3) TYPE
 CURSOR (ROW의 집합) => ResultSet

 CURSOR 사용법
 1) CURSOR 선언
  CURSOR cur_name
  IS
  SELECT * FROM emp (서브쿼리)

 2) CURSOR 열기
  OPEN cur_name;

 3) 데이터 인출 (FETCH)
 3-1)상태
  %NOTFOUND : 데이터가 모두 인출된 상태
  %FOUND : 데이터가 있는지 여부를 확인
  %ISOPEN : cursor가 오픈된 상태인지 확인
  %ROWCOUNT : 몇개를 인출했는지 확인
 
 4) CURSOR를 닫는다
  CLOSE cur_name;
 
2. 제어문
 FOR 변수 IN lo..hi LOOP
   처리문장
 END LOOP;

 FOR i IN 1..9 LOOP
    i
 END LOOP;

for문 예제 (CURSOR로 ResultSet 받아오기)

SET SERVEROUTPUT ON;

DECLARE
 vemp emp%ROWTYPE;
 — CURSOR 선언
 CURSOR C1 IS SELECT * FROM emp;
BEGIN
 FOR vemp IN C1 LOOP
           EXIT WHEN C1%NOTFOUND;
           DBMS_OUTPUT.PUT_LINE(vemp.ename||’ ‘||vemp.hiredate||’ ‘||vemp.job);
 END LOOP;
END;
/

for문 예제2
SET SERVEROUTPUT ON;
DECLARE
   CURSOR emp_cursor IS SELECT ename,sal FROM emp;
   star VARCHAR2(1000);
   cnt NUMBER:=0;
BEGIN
   DBMS_OUTPUT.PUT_LINE(‘사원 급여 현황’);
   FOR cur_var IN emp_cursor LOOP
     EXIT WHEN emp_cursor%NOTFOUND;
     star:=null;
     cnt:=ROUND(cur_var.sal/100,0);
     FOR i IN 1..cnt LOOP
       star:=star||’*’;
     END LOOP;
     DBMS_OUTPUT.PUT_LINE(cur_var.ename||’ ‘||cur_var.sal||’ ‘||star);
   END LOOP;
END;
/

정상 FOR문(i++)
SET SERVEROUTPUT ON;
DECLARE
BEGIN
 FOR i IN 0..5 LOOP
  DBMS_OUTPUT.PUT_LINE(i);
 END LOOP;
END;
/

거꾸로 가는 FOR문(i–)
SET SERVEROUTPUT ON;
DECLARE
BEGIN
 FOR i IN REVERSE 0..5 LOOP
  DBMS_OUTPUT.PUT_LINE(i);
 END LOOP;
END;
/