ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • day11_3 - 오라클 (PL/SQL, RECORD Type 변수, 컬렉션, 바인드 변수, 조건문, 반복문)
    KIC/DB 오라클 2021. 7. 13. 02:59
    반응형

    [PL/SQL RECORD Type 변수]

    1. TYPE type_name IS RECORD

    (field_declaration[, field_declaration]...); 형식

     

     

     

    -> select 문에서 여러개의 변수를 한번에 전달

     

     

     

     

     

     

    [PL/SQL Table Type 변수(컬렉션)]

    - 연관 배열 : 인덱스가 있는 변수의 다중 공간

    - 중첩 테이블
    - VARRAY

     

     

     

    [연관 배열의 주요 특징]

    - 연관 배열은 변수 선언 당시 채워지지 않으며 키나 값을 포함하지 않으므로 선언에서 연관 배열을 초기화할 수 없다.

     

    - 연관 배열을 채우려면 명시적 실행 문이 필요.

     

    - 데이터베이스 테이블의 크기와 마찬가지로 연관 배열의 크기에도 제약이 없다. 따라서 새 행이 추가됨에 따라 연관 배열이 증가하도록 행 수가 동적으로 늘어날 수 있다.

     

    - 키는 순차적이 아닐 수 있으며 양수 및 음수일 수 있다.

     

     

    -> 추후에 커서를 사용하면 더 간단하게 구현 가능하다.

     

     

     

     

     

    [비 PL/SQL 변수]

    [바인드 변수]

    - 바인드 변수는 호스트 환경에서 생성되어 데이터를 저장하므로 호스트 변수라고도 함.
    - VARIABLE 키워드를 사용하여 생성되며 SQL 문과 PL/SQL 블록에서 사용.


          VARIABLE v_bind number; 

          var v_bind number; -> 이렇게 약자로 사용 가능하다.


    - PL/SQL 블록이 실행된 후에도 액세스할 수 있다.


    - 앞에 콜론을 사용하여 참조하며 PRINT 명령을 사용하여 값을 출력할 수 있다. 단 치환변수와는 구분을 해야 함.

     

    - 치환 변수는 사용자에게 어떤 값을 입력 받아서 치환하며 접두 문자로 & (앰퍼샌트)를 사용.

     

    1)

    var v_bind number;

     

    -> pl/sql 블록에서 실제 외부에 있는 변수를 만들어 놓은 것에 값을 넣을 수 있다.

     

    2)

    BEGIN SELECT (pay*12)+NVL(bonus,0) INTO :v_bind -- 이렇게 콜론으로 집어 넣어 외부에서 프린트 가능 

    FROM professor 

    WHERE profno=1001 ; 

    END;


               (결과) PL/SQL procedure successfully completed.

     

    3) PRINT v_bind -- 바인드 변수에 담긴 값을 출력하기

     

     

     

    -> PRINT v_bind를 하지 않고 2) 번 실행 전에 set autoprint on; 구문을 실행하면 2)번 실행할때 자동으로 결과값 출력

     

     

     

     

     

     

     

    [PL/SQL 조건문]

     

    - 조건 문 : IF 문 , CASE 문

     

    1. 조건 문 (IF 문) : 유형 1. IF~END IF 문장

     

     

     

    --EX)

     

    DECLARE

    vempno emp.empno%TYPE; 

    vename emp.ename%TYPE;

    vdeptno emp.deptno%TYPE;
    vdname VARCHAR2(20) := null ;

     

     

    BEGIN 

    SELECT empno , ename , deptno 

    INTO vempno , vename , vdeptno 

    FROM emp 

     WHERE empno=7900; 

     IF (vdeptno = 10) THEN -- IF 문이 시작. 

        vdname := 'ACCOUNT'; 

     END IF ; -- IF 문이 끝나면 반드시 END IF 로 마쳐야 함. 

    IF (vdeptno = 20) THEN 

       vdname := 'RESEARCH';

    END IF ; 

    IF (vdeptno = 30) THEN

        vdname := 'SALES'; 

    END IF ; 

    IF (vdeptno = 40) THEN

        vdname := 'OPERATIONS'; 

    END IF ; 

    DBMS_OUTPUT.PUT_LINE (vempno||' '||vename||' '||vdeptno||' '||vdname);

    END ; 

     

     

    -- 조건문이 여러개인 경우

    DECLARE vempno emp.empno%TYPE;
    vename emp.ename%TYPE; 

    vdeptno emp.deptno%TYPE; 

    vdname VARCHAR2(20) := null ;
    BEGIN 

    SELECT empno , ename , deptno INTO vempno , vename , vdeptno 

    FROM emp 

    WHERE empno=7900;
    IF (vdeptno = 10) THEN 
    vdname := 'ACCOUNT'; 

    elsif (vdeptno = 20) THEN vdname := 'RESEARCH'; 

    elsif (vdeptno = 30) THEN vdname := 'SALES'; 

    elsif (vdeptno = 40) THEN vdname := 'OPERATIONS'; 

    end if; 

    DBMS_OUTPUT.PUT_LINE (vempno||' '||vename||' '||vdname);
    END ;

     

     

     

     

    --CASE 문 예시

    DECLARE 

    v_empno emp.empno%TYPE ; 

    v_ename emp.ename%TYPE ; 

    v_deptno emp.deptno%TYPE ; 

    v_dname varchar2(10) ; 

    BEGIN 

    SELECT empno , ename , deptno INTO v_empno , v_ename , v_deptno 

    FROM emp 

    WHERE empno = &empno ;
    v_dname := CASE v_deptno 

                               WHEN 10 THEN 'ACCOUNT'

                               WHEN 20 THEN 'RESEARCH'

                               WHEN 30 THEN 'SALES'

                               WHEN 40 THEN 'OPERATIONS' END ;
    DBMS_OUTPUT.PUT_LINE (v_empno||' '||v_dname); 

    END ;

     

     

     

     

     

     

     

    [PL/SQL 반복문]

    -> PL/SQL애서 반복문이 매우 중요하다.

    -> 반복횟수를 지정하는 FOR 문

    -> 반복 횟수를 알 수 없는 경우에 사용하는 BASIC LOOP 문과 WHILE 문

     

     

     

     

    [FOR 문]

    declare num number :=0; 

    begin 

       loop dbms_output.put_line(num); 

       num :=num + 1; 

       exit when num > 5; 

       end loop;
    end ;

     

    출력 결과

     

    [반복 횟수 지정하기]

     

    [역순으로 출력]

     

     

     

     

     

    [WHILE 반복문]

    - BASIC LOOP 문은 나중에 조건을 검색하지만 WHILE 문은 시작부터 조건을 먼저 검사한 후 PL/SQL 문장을 수행

     

    - BASIC LOOP 문은 조건 이 틀려도 PL/SQL 문장이 1회는 실행이 되지만 WHILE 문은 아예 실행이 되지 않는다.

     

     

     

    [BASIC LOOP 문]

    declare num number :=5; 

    Begin

       loop dbms_output.put_line(num); 

       num :=num - 1; 

       exit when num < 0;
       end loop;

    end;

     

     

    [WHILE 문]

    declare num number :=5; 

    Begin

       while num >=0 loop

       dbms_output.put_line(num);

       num :=num-1;
       end loop;

    end;

     

     

    동일한 출력 결과 화면

     

     

     

     

     

     

     

     

    300x250

    댓글

Designed by Tistory.