프로시저란?
컴퓨터 프로그래밍에서 특정 작업을 수행하기 위해 일련의 명령어들을 모아놓은 것을 말한다. 이러한 명령어 집합은 하나의 단위로서 작동하며, 반복적으로 수행되어야 하는 작업들을 효율적으로 처리할 수 있게 해준다.
예를 들어, 다음과 같은 상황이 주어진 경우에 더 효율적으로 처리할 수 있다.
상황 : SELECT 문을 한번 실행한 이후 그 결과에 따라 INSERT 또는 UPDATE 문을 실행할지 결정하는 코드를 구현해야 한다.
자바에서는 SELECT 문을 실행하고 결과를 DataSet 에 담아 if 문으로 실행해야한다. 프로시저를 이용하면 이러한 과정이 간소화된다. 하나의 프로시저 안에서 SELECT 문을 실행하고 결과를 변수에 담아 비교할 수 있다. 프로시저를 사용하면 DataSet에 결과를 담을 필요 없어진다.
아래 프로시저 코드는 내 설명을 Chat-GPT로 구현한 결과이다. 프로시저에서는 아래와 같이 하나의 SQL 파일에서 구현이 가능하다.
// 프로시저 선언
CREATE PROCEDURE ProcessData
AS
BEGIN
DECLARE @result INT;
-- SELECT 문 실행
SELECT @result = SomeColumn
FROM SomeTable
WHERE SomeCondition;
-- 결과에 따라 INSERT 또는 UPDATE 문 실행
IF @result IS NULL
BEGIN
-- INSERT 문 실행
INSERT INTO AnotherTable (Column1, Column2)
VALUES (Value1, Value2);
END
ELSE
BEGIN
-- UPDATE 문 실행
UPDATE AnotherTable
SET Column1 = NewValue1, Column2 = NewValue2
WHERE SomeCondition;
END
END
프로시저의 특징
- 프로시저를 하나의 메서드 형식으로 만들고, API 처럼 이를 호출하여 프로시저 내부의 동작을 일괄적으로 처리한다.
- 하나의 요청으로 여러 SQL 문을 실행시킬 수 있기 때문에 네트워크 부하를 줄일 수 있다
프로시저의 반환값
프로시저는 일반적으로 입력 값을 받아들여 처리하고, 결과를 반환할 수 있다. 전통적인 의미의 프로시저는 반환 값이 없는 서브루틴을 지칭하는 데 사용되는 경우가 많았다. 하지만 현대의 프로그래밍 언어나 데이터베이스 관리 시스템에서는 결과를 반환할 수도 있다. 프로그래밍 언어에 따라서 반환값을 가지는 프로시저는 종종 함수라고 불리기도 한다. 이는 언어에 따라 다르다.
즉, 기본적으로 프로시저는 함수(Function) 처럼 결과값을 반환받을 수 없다. 하지만 Oracle (오라클) 같은 데이터베이스 프로그래밍 언어에서는 OUT 변수를 사용하여 결과를 반환하는 것처럼 보일 수 있다.
프로시저와 함수의 차이
프로시저와 함수의 가장 큰 차이점은 반환 값의 유무이다. 함수는 입력 값을 받아서 연산을 수행한 후, 결과 값을 반환하는 기능을 가지고 있다.
함수는 입력에 대한 출력을 반환하여 외부에서 해당 값을 활용할 수 있도록 한다. 반면 프로시저는 함수와 비슷하지만 반환 값이 없다. 특정한 데이터를 출력하는 프로시저는 입력값을 받아서 데이터를 화면에 출력하거나 파일에 저장할 수 있지만, 결과 값을 반환하지는 않는다.
또 다른 차이점은 함수는 표현식(expression) 으로 사용될 수 있지만, 프로시저는 아니다.
// 함수 표현식
const getRectArea = function (width, height) {
return width * height;
};
프로시저 사용법
프로시저 생성/수정
DELIMITER $$
CREATE OR REPLACE DEFINER=`사용자명`@`%` PROCEDURE 프로시저명 (
IN 파라메터명 varchar(50)
)
BEGIN
select / insert/ update/ delete 문 ...
END$$
DELIMITER ;
프로시저 삭제
DROP PROCEDURE IF EXISTS 프로시저명;
프로시저 호출
CALL 프로시저명 (파라메터1, 파라메터2, ...)
프로시저에서 DELIMITER 쓰는 이유
다른 프로시저 관련 글 읽기
참고자료
https://m.blog.naver.com/dnjswls23/221996263409
https://seohee-ha.tistory.com/125
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/function