Procedure 프로시저 란?
여러개의 SQL을 하나의 SQL처럼 정리하여 사용하고자 하는 것.
실행결과를 반환하지 않는다. 즉, return 이 없다.
서버에서 실행되기 때문에 속도가 빠름. 서버에 저장됨 (=stored procedure)
SQL에서 사용할 수 없다.
ex) select 프로시저() (X)
call 프로시저() (O)
Function은 주로 간단한 값 계산.
Procedure는 복잡한 계산의 결과를 얻기 위해 계산 과정을 쪼개놓은것.
예를 들어 어떤 테이블의 데이터를 가지고 여러 테이블의 데이터를 새로 만들거나, 없는 데이터를 찾아서 자동적으로 넣어주는 경우 또는 월별 통계를 내는 경우 등등의 경우 사용된다.
Function으로도 기능 구현은 가능하지만, 펑션은 하나의 결과값만을 리턴 하는 반면, 프로시저는 최종결과까지 계속해서 중간결과를 출력할 수 있다. (like println() in java)
예를 들어 전기요금을 구하는 기능 구현시,
펑션은 최종 전기요금만을 리턴하지만 프로시저로 구현할 경우, 내가 쓴 전력랑, 기본 요금, 전력요금, 총합계 등등의 원하는 정보를 순차적으로 출력하고 알 수 있다.
Procedure 쿼리
예제 1) 전기요금 구하기.
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_calc_elecity_amount`(IN p_quantity INT)
BEGIN
DECLARE _basicFee INT; -- 변수선언
DECLARE _fee INT;
SET _basicFee = CASE
WHEN p_quantity > 400 THEN 7300
WHEN p_quantity > 200 THEN 1600
ELSE 910
END ;
SELECT CASE WHEN p_quantity > 400 THEN (200*93.3)+(200*187.9)+(p_quantity-400) * 280.6
WHEN p_quantity > 200 THEN (200*93.3)+((p_quantity-200) * 187.9)
ELSE p_quantity *93.3
END INTO _fee;
SELECT
p_quantity as '사용량',
_basicFee as '기본요금',
_fee as '전력량요금'
FROM DUAL;
END
** Procedure안에 function이 포함될 수 있다.
예제 2) 4대보험료 구하기
[
BEGIN
DECLARE _nation INT; -- 국민연금
DECLARE _health INT; -- 건강
DECLARE _care INT; -- 장기요양
DECLARE _work INT; -- 고용
DECLARE _sum INT; -- 총합
SET _nation = (p_salary * 0.09) / 2;
SET _health = (p_salary * 0.0624) / 2;
SET _care = _health* 0.0738;
SET _work = p_salary * 0.0065;
SET _sum = _nation+_health+_care+_work ;
SELECT
p_salary as '소득',
_nation as '국민연금',
_health as '건강보험',
_care as '장기요양',
_work as '고용보험',
_sum as '4대보험 총합'
FROM DUAL;
END
예제3) 회문 검사.
[
BEGIN
DECLARE _temp VARCHAR(10);
DECLARE _result VARCHAR(10);
SET _temp = REVERSE(_input);
SET _result = IF( STRCMP(_input, _temp) = 0, 'yes', 'no');
RETURN _result;
END
'Back-end > DataBase' 카테고리의 다른 글
MYSQL 내장함수 Built in functions (0) | 2018.06.22 |
---|---|
SQL - View 뷰란? Trigger 트리거란? (0) | 2018.06.22 |
SQL - Function 함수란? (0) | 2018.06.21 |
SQL -JOIN 조인이란? (INNER / OUTER) (0) | 2018.06.21 |
SQL 통계 - 행열 뒤집기 연습문제 난이도 ★★★★★ (0) | 2018.06.20 |