[sql]PL/SQL - 프로시저(PROCEDURE)

*PROCEDURE은 "이름있는"블록이라고 생각하면 편한다.

*다음은 PROCEDURE의 기본형태이다.
CREATE TO REPLACE PROCEDURE name( IN argument / OUT argument / IN OUT  argument )
IS
    ----LOCAL변수 선언 위치----
    BEGIN
    END; 
1. IS 로 PL/SQL의 블록을 시작 한다.
2. LOCAL 변수는 IS 와 BEGIN 사이에 선언 한다.

*다음은 PROCEDURE의 사용 예이다.
CREATE OR REPLACE PROCEDURE p_update_member_age( v_member_id IN NUMBER ) 
IS
    ----LOCAL변수 선언 위치----
    BEGIN
        UPDATE TB_MGR_MEMBER
               SET AGE = 'man'
         WHERE MEMBER_ID =  v_member_id;

        COMMIT;                                                    --자동 COMMIT되지않으므로 반드시 명시해애한다.

    END p_update_member_age;

--생성한 프로시져(PROCEDURE)을 실행합니다.
EXEC p_update_member_age(12345);

*IN, OUT, IN OUT
1. IN : 내부 프로그램에 제공
변수이름 IN VARCHAR2;  --인수선언할때 byte수 지정안함 (인수는 크기를 주지 않습니다.)
변수이름 IN 테이블이름.컬럼명%TYPE;
변수이름 IN 테이블이름.컴럼명%TYPE := 값;
변수이름 IN 테이블이름.컬럼명%TYPE DEFAULT 값;

2. OUT : 호출자에게 제공
프로시저 실행 시점에 OUT 매개변수를 변수 형태로 전달하고,
프로시저 실행부에서 이 매개변수에 특정 값을 할당

3. IN OUT : 입력과 동시에 출력용으로 사용할 수 있다.
변수이름 IN VARCHAR2;
변수이름 IN 테이블이름.컬럼명%TYPE;

*IN, OUT, IN OUT의 성격을 잘 알 수 있는 예제 
CREATE OR REPLACE PROCEDURE
pro_validation_check( va1 IN VARCHAR2, val2 OUT VARCHAR2, val3 IN OUT VARCHAR2 )
IS
    BEGIN
        --val1 출력
        val2 := 'aaaaa';
        val3 := 'bbbb';
    END;

DECLARE
    val2 VARCHAR2 := "pppppp';
    val3 VARCHAR3 := 'kkkkkkk';
BEGIN
    
pro_validation_check( '11111', val2, val3 );
    --val2 출력 -> aaaaa
    --val3 출력 -> bbbb
END;

댓글

이 블로그의 인기 게시물

[sql] 테이블 생성