[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;
댓글
댓글 쓰기