Old/Procedure

02_Scala

깨꾹2 2018. 10. 10. 10:46

1.일반 단일 데이터 타입

변수명 [CONSTANT] [DATA_TYPE] [NOT NULL] := 초기값;




DECLARE 

    var_emp_no NUMBER(3,0);

    var_emp_name VARCHAR2(40);

    var_emp_grade CHAR(1) := 'A';

    BEGIN

    var_emp_no :=123;

    var_emp_name :='Kim';

    DBMS_OUTPUT.PUT_LINE('사원 번호 : '||var_emp_no);

    DBMS_OUTPUT.PUT_LINE('사원 이름 : '||var_emp_name);

    DBMS_OUTPUT.PUT_LINE('사원 등급 : '||var_emp_grade);

    END;

/



일반 데이터 사용 예시를 익명 프로시저로 나타냄.



DECLARE

    var_emp_no NUMBER(3);

    var_emp_fn NVARCHAR2(8);

    var_emp_ln NVARCHAR2(2);

    var_emp_sal NUMBER;

    BEGIN

        SELECT emp_no, family_name, first_name, salary

        INTO var_emp_no, var_emp_fn, var_emp_ln, var_emp_sal

        FROM employees WHERE emp_no = 117; 

        DBMS_OUTPUT.PUT_LINE('사원 번호 : '||var_emp_no);

        DBMS_OUTPUT.PUT_LINE('성 : '||var_emp_fn);

        DBMS_OUTPUT.PUT_LINE('이름 : '||var_emp_ln);

        DBMS_OUTPUT.PUT_LINE('급여 : '||var_emp_sal);

    END;

/



익명 프로시저에서는 변수선언시 IN, OUT을 따로 표시하지 않아도 IN, OUT 처럼 사용할 수 있다.




2.%TYPE변수

[변수명] 테이블명.컬럼명%TYPE



CREATE OR REPLACE PROCEDURE emp_in(ref_emp_no IN employees.emp_no%TYPE)

    IS

    var_emp_no employees.emp_no%TYPE;

    var_emp_fn employees.family_name%TYPE;

    var_emp_ln employees.first_name%TYPE;

    var_emp_sal employees.salary%TYPE;

    BEGIN

        SELECT emp_no, family_name, first_name, salary

        INTO var_emp_no, var_emp_fn, var_emp_ln, var_emp_sal

        FROM employees WHERE emp_no = ref_emp_no; 

        DBMS_OUTPUT.PUT_LINE('사원 번호 : '||var_emp_no);

        DBMS_OUTPUT.PUT_LINE('성 : '||var_emp_fn);

        DBMS_OUTPUT.PUT_LINE('이름 : '||var_emp_ln);

        DBMS_OUTPUT.PUT_LINE('급여 : '||var_emp_sal);

    END;

/


EXEC emp_in(120);


%TYPE 변수를 이용한 프로시저 생성 및 실행




3.%ROWTYPE

테이블명%ROWTYPE

테이블의 모든 컬럼을 통채로 들고 온다.

테이블명%ROWTYPE




DECLARE

    v_emp employees%ROWTYPE;

    BEGIN

        SELECT emp_no, first_name, family_name, reg_date

        INTO v_emp.emp_no, v_emp.first_name, v_emp.family_name, v_emp.reg_date    

        FROM employees WHERE emp_no=120;

        DBMS_OUTPUT.put_line('사원번호 : '||v_emp.emp_no);

        DBMS_OUTPUT.put_line('이름 : '||v_emp.first_name);

        DBMS_OUTPUT.put_line('입사날짜 : '||v_emp.reg_date );

    END;

/



로우타입을 이용해서 employees에 모든 컬럼들 가져와서 사용한다.




CREATE OR REPLACE PROCEDURE a(e_no IN NUMBER)

    IS

        v_emp employees%ROWTYPE;

    BEGIN

        SELECT emp_no, first_name, family_name, reg_date

        INTO v_emp.emp_no, v_emp.first_name, v_emp.family_name, v_emp.reg_date    

        FROM employees WHERE emp_no=e_no;

        DBMS_OUTPUT.put_line('사원번호 : '||v_emp.emp_no);

        DBMS_OUTPUT.put_line('이름 : '||v_emp.first_name);

        DBMS_OUTPUT.put_line('입사날짜 : '||v_emp.reg_date );

    END;

/

EXEC a(120);




익명 프로시저를 프로시저로 바꾸어서 사용한 모습




'Old > Procedure' 카테고리의 다른 글

07_커서  (0) 2018.10.11
06_Loop,While문  (0) 2018.10.11
05_IF  (0) 2018.10.10
04_활용  (0) 2018.10.10
03_Function  (0) 2018.10.10