SQL 기초

SQL기초 프로시저(Stored Procedure)

class="song" 2023. 12. 6. 00:11
728x90

프로시저는 프로그램 영역이 아닌, DB자체에서 SQL구문을 관리하고자 할 때 사용한다.

 

데이터베이스에 SQL 구문을 객체화하여 호출방식으로만 사용하는 방식이다.

 

procedure 생성 방법은

delimiter //

CREATE PROCEDURE spNoCartMember()

BEGIN 
 	-- 조회할 select 문 생성
	SELECT mem_id , mem_name
	FROM `member` 
	WHERE mem_id NOT IN (SELECT cart_member FROM cart ) ;

END //

delimiter ;

위와 같은데 view에서 사용했던 쿼리문을 그대로 작성하였다.

다른점은 create procedure로 시작하고, 사용할 이름옆에 함수처럼 소괄호()를 붙인다.

 

호출할 때도 함수와 비슷한 형태로 작성한다

CALL spNoCartMember();

 

이를 응용하여 쿼리문을 작성하고, 뷰로 만들고 그것을 프로시저로 만드는 작업을 정리해 보겠다.

 

우선 쿼리문 작성

SELECT buyer_id, buyer_name , sum(cart_qty * prod_sale)
FROM buyer 
	LEFT OUTER JOIN prod
	ON (buyer_id = prod_buyer)
	LEFT OUTER JOIN cart 
	ON (prod_id = cart_prod
	AND cart_no LIKE '2005%')
GROUP BY buyer_id;

거래처별 매출합계를 조회하는 쿼리문을 작성하였다.

이때 조건은 2005년도에 판매되었던 물건이다.

그룹은 거래처아이디로하여 거래처별로 조회할 수 있도록 하였다.

cart_qty컬럼은 판매물품의 갯수이고,

prod_sale은 판매가격이다.

sum함수를 사용하여 합계를 내었다.

 

이제 view로 바꾸어 보자

delimiter //

CREATE VIEW viewGetbuyerAll AS

 	-- 조회할 select 문 생성
SELECT buyer_id, buyer_name , sum(cart_qty*prod_sale)
FROM buyer 
	LEFT OUTER JOIN prod
	ON (buyer_id = prod_buyer)
	LEFT OUTER JOIN cart 
	ON (prod_id = cart_prod
	AND cart_no LIKE '2005%')
GROUP BY buyer_id // 

delimiter ;

위와 같이 작성하여 쿼리문을 view로 변경하였다.

 

이때 조회를 하고 싶다면

SELECT *
FROM  viewGetbuyerAll;

이렇게 작성하여 조회할 수 있다.

똑같은 기능을 하는 코드를 한번 정의하고 조회하고 싶을 때마다 짧은 코드를 작성하여 쉽게 조회할 수 있다.

 

이것을 다시 procedure로 변경해 보겠다.

delimiter //

CREATE PROCEDURE spGetbuyerAll()

BEGIN 
 	SELECT *
 	FROM viewgetbuyerall ;

END //

delimiter ;

 

view자체를 프로시저내부에서 실행되게 하였다.

이제 프로시저를 호출하면 처음 만들었던 기능인 거래처별 판매합계를 조회할 수 있다.

 

프로시저 호출

CALL spGetbuyerAll();

길었던 쿼리문이 한 줄이 되었다.

반복적으로 사용해야 하는 쿼리문을 view나 프로시저로 변경하여 사용해 보자

 

기능을 수정할 때도 간편하다.

 

여러 군데에 작성되어 있는 똑같은 기능들을 하나의 프로시저로 묶고,

수정 시에 프로시저만 수정하여 사용할 수도 있다.

 

728x90