728x90
[SQL] 프로시저와 함수
프로시저 (procedure)
: 일련의 SQL 문으로 구성된 코드 블록
코드 블록은 데이터 베이스에 저장되며, 필요할 때 호출하여 실행할 수 있음
프로시저는 주로 반복적인 작업을 수행하거나 복잡한 데이터 조작 및 처리를 위해 사용됨
함수(Function) 처럼 결과값을 Return 받을 수 없음, out 매개변수를 사용하여 값을 전달
장점
- DB 서버에서 실행되기 때문에, 네트워크 비용을 줄이고 데이터 베이스와 상호작용을 최소화하여 성능을 향상 시킬 수 있음
- 하나의 요청으로 여러 SQL문을 실행할 수 있음
- 프로시저는 데이터 베이스의 인증된 사용자만 호출할 수 있으므로 보안 측면에서 이점
단점
- 디버깅 및 유지보수가 어려움
- 문자나 숫자 연산에 프로시저를 사용한다면 성능이 낮아질 수 있음
Example
GetEmployeeCount라는 이름의 프로시저를 생성하고, Employees 테이블의 레코드 수를 반환하는 프로시저
DELIMITER //
CREATE PROCEDURE GetEmployeeCount()
BEGIN
SELECT COUNT(*) AS EmployeeCount FROM Employees;
END //
DELIMITER ;
프로시저 호출
CALL GetEmployeeCount();
함수 (Function)
: 프로시저와 유사하지만, 값을 반환하는데 사용됨
매개변수를 받아서 SQL 문을 실행한 후 결과 값을 반환
장점
- 다른 쿼리나 연산에서 호출하여 재사용 할 수 있음, 쿼리의 일부로 사용되어 계산된 값을 반환하거나 데이터 조작에 사용될 수 있음
- 작은 단위의 로직을 모듈화하여 코드의 가독성과 유지보수성을 높일 수 있음
단점
- 함수 호출이 반복적으로 수행되는 쿼리의 경우 성능 저하가 발생할 수도 있음
- 프로시저보다 속도가 느림
Example
CalculateTotalPrice라는 이름의 함수를 생성하고 매개변수를 받아서 총 가격을 계산
CREATE FUNCTION CalculateTotalPrice(quantity INT, unit_price DECIMAL(10,2))
RETURNS DECIMAL(10,2)
BEGIN
DECLARE total DECIMAL(10,2);
SET total = quantity * unit_price;
RETURN total;
END;
함수를 쿼리에 포함 시킬 수 있음
5와 10.99를 곱한 총 가격을 반환하여 TotalPrice라는 별칭으로 결과를 가져옴
SELECT CalculateTotalPrice(5, 10.99) AS TotalPrice;
결론
함수 | 프로시저 | |
처리주체 | 클라이언트에서 처리 | 서버로 보내서 처리 |
리턴값 유무 | 필수 | 선택 |
리턴값 갯수 | 하나만 반환가능 | 여러개 반환가능 |
호출방법 | select문장안에서 함수호출 | call 프로시저명() |
주사용처 | 로직 처리 도와주는 용도 | 로직 처리를 직접하는 용도 why? DML문 사용가능해서 |
프로시저는 데이터베이스의 상태 변경 및 로직 수행에 중점을 두고
함수는 주로 쿼리내에서 사용되며, 결과 값을 다른 쿼리에 사용하는데 유용함
참조
https://sowon-dev.github.io/2022/11/28/221129MySQL-function-Procedure/
반응형
'💾 Data > SQL' 카테고리의 다른 글
[MySQL] 데이터베이스 및 테이블 별 용량 조사 (0) | 2023.06.27 |
---|---|
[DB] 파티션 (Partition) (0) | 2023.06.08 |
[MySQL] 데이터 타입 변환하기 (0) | 2023.05.18 |
[SQL] View (0) | 2023.05.14 |
[SQL] 데이터 그룹화/JOIN (0) | 2023.03.29 |