본문 바로가기
DB/DBMS

DBMS - 프로시저(Procedure)

by 코딩하는 랄로 2023. 8. 20.
728x90

프로시저 - PL/SQL

프로시저는 함수라는 의미로 programming 언어에서 흔히 쓰이는 function과 기능이 유사하다. 프로시저 문법을 쓰기 위해서는 PL/SQL문에 대해서 알아야 한다.

 

 

PL/SQL : Procedural Language Extension/Structured Query Language

DML의 단순 데이터 활용 한계로 SQL언어에 절차적 언어의 요소를 더하여 데이터 처리를 향상시킨 기능으로 일반 프로그래밍 언어에서 제공하는 많은 기능들이 탑재되어 있다. 

 

DB에 직접 탑재되어 컴파일되고 실행되어 성능면에서도 우수하다.

 

 

사용법

프로시저의 사용법은 다음과 같다.

CREATE OR REPLACE PROCEDURE 프로시저명
(
	[매개변수1] [매개변수1 타입]
   	...
)
IS
	-- 함수 내에서 사용할 변수, 상수 등 선언\
BEGIN
	실행문
END;

 

먼저 CREATE OR REPLACE 문을 통하여 프로시저의 이름과 함께 프로시저를 생성한 후 () 안에 매개 변수의 이름과 타입을 정해준다.

 

흔히, 특정 물질 과 물질을 연결해주는 것을 매개체라고 하는데 매개 변수도 이와 마찬가지로 함수 외부의 값을 내부에서 사용할 수 있게 연결해주는 변수이다.

 

매개변수를 선언해준 후, IS를 통해 함수 내부에서 사용되는 변수들을 선언해준다. 위에 매개변수와는 엄연히 다른 변수로 함수 내부에서 선언되어 사용되어지는 변수이다.

 

마지막으로 BEGIN문을 통해 실행문을 작성하게 되고 END를 통해 문장을 끝내면 프로시저를 선언할 수 있다.

 

프로시저로 선언하지 않고 DECLATE문을 통해서도 다음과 같은 형식으로 사용할 수 있다.

DECLARE
	선언문
BEGIN
	실행문
END;

 

 

 

PL/SQL : 조건문

PL/SQL 기능 중 조건문에 해당하는 기능이 있기 때문에 프로시저 내에서 조건문을 통한 실행문을 작성할 수 있다.

 

 

IF문

IF 조건 THEN 실행문;
END IF;

다른 프로그래밍 언어와 비슷하게 IF 를 통해 조건식을 선언하고 THEN을 통해 조건식이 참일 때 실행할 실행문을 작성하게 된다.

 

PL/SQL에서의 조건문을 사용할 때 항상 END IF문을 통해 IF 조건문이 끝났음을 알려야 한다.

 

 

IF, ELSE문

IF 조건문 THEN 실행문;
ELSE 실행문;
END IF;

IF문이 거짓일 경우, ELSE문이 실행이 된다. ELSE 문은 위의 IF문이 모두 만족하지 않는 모든 조건을 포함하고 있기 때문에 조건식을 기술하지 않고 바로 실행문을 선언하여 준다.

 

 

IF,ELSIF, ELSE

IF 조건문 THEN 실행문;
ELSIF 조건문 THEN 실행문;
...
ELSIF 조건문 THEN 실행문;
END IF;

프로그래밍을 하다보면 조건문을 여러개 사용할 때가 있다. 이 때에 사용하는 문법이 ELSIF문이다. ELSIF문의 경우, 위의 조건식이 만족하지 않을 경우 해당 조건식을 검사하게 된다.

 

만약 중간 조건문에서 참인 조건문이 나오게 된다면 해당 실행문을 실행하고 바로 END IF를 통해 조건문을 종료하게 되기 때문에 IF문 보다 간결하고 효율적이다.

 

IF문은 선언된 이상 참이든 거짓이든 모두 검사하기 때문에 IF문으로 여러 조건문을 작성시 중간에 참인 조건이 나와도 아래에 거짓 조건문 모두 검사하여 ELSIF문보다 비효율적인 것이다.

 

 

 

이 글에서는 조건문만을 다루고 있지만 PL/SQL문에는 조건문 이외에도 반복문, SQL문 등 여러 기능을 제공하고 있어 프로시저 문을 보다 다양하게 응용할 수 있다.

728x90

'DB > DBMS' 카테고리의 다른 글

DBMS - VIEW  (0) 2023.08.17
DBMS - DCL  (0) 2023.08.17
DBMS - JOIN  (0) 2023.08.17
DBMS - Optimizer, Hint  (0) 2023.08.15
DBMS - GRUOP BY, SUB QUERY  (0) 2023.08.15