오라클 프로시저 실행 방법. BEGIN END, OUT 변수 출력하기, EXEC 프로시저 (펑션)

우선 예제에서 사용할 프로시저는 다음과 같습니다. 첫 번째 프로시저는 IN, OUT, IN OUT 매개변수를 매개로 하며, 두 번째 프로시저는 IN 매개변수 하나를 사용합니다.

오라클 프로시저 실행 방법
CREATE OR REPLACE PACKAGE USER_NAME.PACKAGE_NAME IS
    PROCEDURE PROCEDURE_NAME(IN_PARAM_NAME IN VARCHAR2,
    OUT_PARAM_NAME OUT VARCHAR2,
    IN_OUT_PARAM_NAME IN OUT VARCHAR2); 
    PROCEDURE PROCEDURE_NAME(IN_PARAM_NAME IN VARCHAR2);     
END;
/
CREATE OR REPLACE PACKAGE BODY USER_NAME.PACKAGE_NAME
IS
   PROCEDURE PROCEDURE_NAME (IN_PARAM_NAME       IN     VARCHAR2,
                             OUT_PARAM_NAME         OUT VARCHAR2,
                             IN_OUT_PARAM_NAME   IN OUT VARCHAR2)
   IS
   BEGIN
      DBMS_OUTPUT.PUT_LINE ('PROCEDURE => BEFORE SET');
      DBMS_OUTPUT.PUT_LINE ('IN: ' || IN_PARAM_NAME);
      DBMS_OUTPUT.PUT_LINE ('OUT: ' || OUT_PARAM_NAME);
      DBMS_OUTPUT.PUT_LINE ('IN OUT: ' || IN_OUT_PARAM_NAME);
      OUT_PARAM_NAME := 'OUT_2';
      IN_OUT_PARAM_NAME := 'IN_OUT_2';
      DBMS_OUTPUT.PUT_LINE ('PROCEDURE => AFTER SET ''out'', ''in out''');
      DBMS_OUTPUT.PUT_LINE ('IN: ' || IN_PARAM_NAME);
      DBMS_OUTPUT.PUT_LINE ('OUT: ' || OUT_PARAM_NAME);
      DBMS_OUTPUT.PUT_LINE ('IN OUT: ' || IN_OUT_PARAM_NAME);
   EXCEPTION
      WHEN OTHERS
      THEN
         DBMS_OUTPUT.PUT_LINE (SQLERRM);
   END;
   
   PROCEDURE PROCEDURE_NAME (IN_PARAM_NAME       IN     VARCHAR2)
   IS
   BEGIN
      DBMS_OUTPUT.PUT_LINE ('PROCEDURE => in parameter');
      DBMS_OUTPUT.PUT_LINE ('IN: ' || IN_PARAM_NAME);         
   EXCEPTION
      WHEN OTHERS
      THEN
         DBMS_OUTPUT.PUT_LINE (SQLERRM);
   END;   
END;
/

오라클 프로시저 실행 방법. BEGIN END, OUT 변수 출력하기

PL/SQL 블록(begin, end)을 통해 호출하는 방법입니다. Out 변수를 출력하는 방법, 그리고 각 파라미터 모드가 어떻게 값이 할당되는지 담아보았습니다. 변수 출력을 위한 DECLARE 선언부를 참고해 주세요.

DECLARE
   IN_PARAM_NAME       VARCHAR2 (32767);
   OUT_PARAM_NAME      VARCHAR2 (32767);
   IN_OUT_PARAM_NAME   VARCHAR2 (32767);
BEGIN
   IN_PARAM_NAME := 'IN_1';
   OUT_PARAM_NAME := 'OUT_1';
   IN_OUT_PARAM_NAME := 'IN_OUT_1';
   DBMS_OUTPUT.PUT_LINE ('CALLER => BEFORE CALL');
   DBMS_OUTPUT.PUT_LINE ('IN: ' || IN_PARAM_NAME);
   DBMS_OUTPUT.PUT_LINE ('OUT: ' || OUT_PARAM_NAME);
   DBMS_OUTPUT.PUT_LINE ('IN OUT: ' || IN_OUT_PARAM_NAME);
   PACKAGE_NAME.PROCEDURE_NAME (IN_PARAM_NAME,
                                OUT_PARAM_NAME,
                                IN_OUT_PARAM_NAME);
   DBMS_OUTPUT.PUT_LINE ('CALLER => AFTER CALL');
   DBMS_OUTPUT.PUT_LINE ('IN: ' || IN_PARAM_NAME);
   DBMS_OUTPUT.PUT_LINE ('OUT: ' || OUT_PARAM_NAME);
   DBMS_OUTPUT.PUT_LINE ('IN OUT: ' || IN_OUT_PARAM_NAME);
END;
/
CALLER => BEFORE CALL
IN: IN_1
OUT: OUT_1
IN OUT: IN_OUT_1
PROCEDURE => BEFORE SET
IN: IN_1
OUT:
IN OUT: IN_OUT_1
PROCEDURE => AFTER SET 'out', 'in out'
IN: IN_1
OUT: OUT_2
IN OUT: IN_OUT_2
CALLER => AFTER CALL
IN: IN_1
OUT: OUT_2
IN OUT: IN_OUT_2

PL/SQL procedure successfully completed.

위의 예제에서 별도의 매개변수를 할당하는 방법은 다음과 같이 람다식을 작성합니다.

PACKAGE_NAME.PROCEDURE_NAME (IN_PARAM_NAME       => :IN_PARAM,
                                OUT_PARAM_NAME      => :OUT_PARAM,
                                IN_OUT_PARAM_NAME   => :IN_OUT_PARAM);

실제 변수와 형식 변수를 명시적으로 할당하는 방법입니다. (이번 예제는 실제 변수와 형식 변수가 이름이 동일하여 다음과 같이 작성을 할 수 있습니다)

PACKAGE_NAME.PROCEDURE_NAME (IN_PARAM_NAME       => IN_PARAM_NAME,
                                OUT_PARAM_NAME      => OUT_PARAM_NAME,
                                IN_OUT_PARAM_NAME   => IN_OUT_PARAM_NAME);

EXEC

매개변수가 IN 모드만 있는 경우에는 서브프로그램 호출 구문을 생략하여, EXEC 명령을 통해 실행할 수도 있습니다.

EXEC PACKAGE_NAME.PROCEDURE_NAME ('BEOMSANG');
PROCEDURE => in parameter
IN: BEOMSANG

PL/SQL procedure successfully completed.
댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗