한 웹 사이트 메인 페이지에 검색기능과 로그인기능이 있다.
메인 페이지에 한 번 접속했을 때 검색과 로그인에 관한 select 쿼리를 한 번에 실행시키고 싶어서 만든 것이 프로시저
단점 -> 재사용성이 좋지 않고 쓸데없이 많은 쿼리를 실행하게 함.
장점 -> 한 번의 요청으로 많은 쿼리를 실행할 수 있고 네트워크 시간 줄임.
아래와 같은 테이블이 있을 때
DELIMITER //
CREATE PROCEDURE `age`(IN age_limit INT)
BEGIN
IF age_limit >= 20 THEN
SELECT id, name, old
FROM userdb.exam
WHERE old > age_limit;
ELSE
SELECT id, name, old
FROM userdb.exam
WHERE old <= age_limit;
END IF;
END //
DELIMITER ;
"age"라는 프로시저를 생성하였다. 파라미터는 age_limit
BEING - END 사이에 쿼리를 넣어준다. 두 개의 쿼리를 조건문IF ELSE로 구분지었다.
age_limit가 20이상일 때 old가 20보다 큰 수가 나오고
age_limit가 20미만일 때 old가 20보다 작은 수가 나온다.
CALL age(24);
위 sql을 실행시키면
24초과인 나이를 가진 필드 2개만 나오고
CALL age(19);
위 sql을 실행시키면
19이하인 나이를 가진 필드 하나만 출력된다.