저장 프로시저

  • 정의
    • Transact-SQL 문장의 집합
  • 용도
    • 어떠한 동작을 절차적 일괄처리 작업하는 데 사용
    • SQL Server에서 사용하는 프로그래밍 기능
  • 특징
    • SQL Server의 성능 향상(첫 실행 시 컴파일, 재컴파일 안 함)
    • 모듈식 프로그래밍 가능
    • 보안 강화(저장 프로시저마다 권한 할당 가능)
    • 네트워크 전송량 감소(긴 쿼리 문장의 단순화)
  • 장점
    • 빠르다
    • 파라미터 사용 가능
    • 여러 애플리케이션과 공유 가능
  • 기본 문법
    • (인수 없는)프로시저 생성 방법
	CREATE OR REPLACE PROCEDURE 프로시저이름 
	IS
	[
	변수이름 데이터타입;  -- 프로시저내에서 사용할 변수선언
	변수이름 데이터타입;
	변수이름 데이터타입;
	..
	]
	BEGIN
	 기능 구현;
	END;

 

 

  • EX) 인수없는 프로시저
	SET SERVEROUTPUT ON; 
	CREATE OR REPLACE PROCEDURE p_test 
	IS 
		I_MESSAGE VARCHAR2(100) := 'https://pdache.tistory.com'; 
	BEGIN 
		dbms_output.put_line(I_MESSAGE); 
	END; 
	EXEC p_test; --프로시저 호출

 

  • (인수 있는) 프로시저 생성 방법
	CREATE OR REPLACE PROCEDURE 프로시저이름(
	변수이름 IN 데이터타입, 변수이름 IN 데이터타입, .... --IN 생략가능
	)
	IS
	[
	변수이름 데이터타입;  -- 프로시저내에서 사용할 변수선언
	..
	]
	BEGIN
	기능 구현;
	END;

 

  • EX) 인수 있는 프로시저
	CREATE OR REPLACE PROCEDURE p2_test( p_name IN VARCHAR2 ) 
	IS 
	BEGIN 
		dbms_output.put_line(p_name||' 님 안녕하세요?'); 
	END; 
	EXEC p2_test; --프로시저 호출 (오류발생 ) 
		-- (프로시저에 in이 있으면서 기본값이 없기 때문에 반드시 인수값 필요함) 
	EXEC p2_test('Pdache');

 

※인수의 타입 선언 부분 정리

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

 

  • OUT => 호출자에게 제공
    • 프로시저 실행 시점에 OUT 매개변수를 변수 형태로 전달하고, 프로시저 실행부에서 이 매개변수에 특정 값을 할당
        변수이름 IN VARCHAR2;
        변수이름 IN 테이블이름.컬럼명%TYPE;

 

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

 

※ IN OUT, OUT 모드로 선언된 파라미터에는 DEFAULT를 적용할 수 없다.

 

 

  • 프로시저 호출 방법
	EXEC 프로시저이름; -- 인수없는 경우 호출
	EXEC 프로시저이름(값, 값, ...);  - 인수있는 경우 호출

 

  • 저장된 프로시저 찾기
    • 작성된 프로시저를 찾기 위해 데이터 사전을 이용할 수 있다.
    • 데이터 사전은 대문자로 값을 저장하기 때문에 대문자로 검색한다.
SELECT * FROM user_objects WHERE object_type = 'PROCEDURE';
SELECT * FROM user_source WHERE name = '프로시저명';

 

  • 프로시저 output 매개변수 사용하기
    • 웹 개발을 하면서 프로시저 결과 핸들링을 위해 많이 사용
    • 프로시저를 실행하여 특정 결과 값을 OUT 변수에 저장하여 보냄
    • OUT 있는 프로시저 작성방법
	CREATE OR REPLACE PROCEDURE 프로시저이름 (
	변수이름 IN 데이터타입, 변수이름 IN 데이터타입, .... --in 생략가능
	변수이름 OUT 데이터타입, 변수이름 OUT 데이터타입 ... --프로시저를 호출하는곳으로 값을 보낸다.
	)
	IS
	[
	변수이름 데이터타입;  -- 프로시저내에서 사용할 변수선언
	..
	]
	BEGIN
	기능 구현;
	END;

 

 

  • EX) 이름을 OUTPUT 해주는 프로시저
	CREATE OR REPLACE PROCEDURE p_outTest(
		p_NAME OUT VARCHAR2
	)
	IS
	BEGIN
		p_NAME := 'Pdache';
	    DBMS_OUTPUT.PUT_LINE('호출 완료');
	END;
	--out이 있는 프로시저 호출방법
	--DECLARE 로 선언되변수는 일회용
	
	DECLARE
	OUT_MSG VARCHAR2(2000);
	
	BEGIN
	p_outTest(OUT_MSG);  -- 프로시저를 실행 한후에 out을 받을 변수지정
	dbms_output.put_line(OUT_MSG); -- 출력하기
	END;

'Study > Oracle' 카테고리의 다른 글

PL/SQL_6 - 테이블 함수  (0) 2021.05.18
PL/SQL 기본_5 - 함수  (0) 2021.05.17
PL/SQL 기본_3 - 커서  (0) 2021.05.10
PL/SQL 기본_2 - 반복문과 제어문  (0) 2021.05.10
PL/SQL 기본_1  (0) 2021.05.10

+ Recent posts