27. 판매 데이터 추가 저장 프로시저

이번에는 판매 데이터를 추가하는 저장 프로시저를 작성해 봅시다. 판매 데이터는 PID, CID, COUNT 정보가 있어야 합니다. 그리고 이미 판매 테이블에 PID와 CID가 같은 판매 데이터가 있다면 COUNT를 추가하면 되겠죠. 따라서 먼저 판매 테이블에 PID와 CID가 같은 판매 데이터가 있는지 확인이 필요합니다.

Exists (Select * from SALE where PID = @PID and CID = @CID )

그리고 이미 PID와 CID가 같은 판매 데이터가 있다면 COUNT 정보를 얻어와서 입력 인자로 받은 COUNT 값과 더한 값으로 변경해야 합니다. 여기에서는 현재 판매 데이터의 COUNT 값을 NOWCOUNT 변수에 얻어올게요.

DECLARE @NOWCOUNT int

SELECT @NOWCOUNT = COUNT from SALE where PID = @PID and CID=@CID

그리고 입력 인자로 전달받은 COUNT와 NOWCOUNT의 값을 더하여 기존 판매 데이터의 COUNT 값을 변경해야겠죠.

SET @COUNT = @COUNT + @NOWCOUNT

UPDATE Sale SET COUNT = @COUNT where PID = @PID and CID=@CID

물론, 판매 테이블에 PID와 CID가 같은 판매 데이터가 없다면 판매 테이블에 추가하면 되겠죠. 그런데 판매 테이블에 판매 데이터를 추가하려면 판매 일시도 필요한데 이는 MS SQL 내장 함수인 now를 이용하기로 할게요.

insert into sale values(@CID, @PID, @Count, {fn now()})

ALTER PROCEDURE dbo.AddSale
	(
	@PID int,
	@CID int,
	@COUNT int OUTPUT
	)
AS
IF Exists (Select * from SALE where PID = @PID and CID = @CID )
	Begin
	DECLARE @NOWCOUNT int
	SELECT @NOWCOUNT = COUNT from SALE where PID = @PID and CID=@CID
	SET @COUNT = @COUNT + @NOWCOUNT
	UPDATE Sale SET COUNT = @COUNT where PID = @PID and CID=@CID
	End
else
	Begin
	insert into sale values(@CID, @PID, @Count, {fn now()})
	End
RETURN

이번에는 상품 이름과 고객 이름, 판매 개수를 인자로 하는 판매 추가 저장 프로시저를 작성해 봅시다. 이미 앞에서 상품 아이디와 고객 아이디로 판매를 추가하는 저장 프로시저는 AddSale 저장 프로시저로 만들었죠. 여기에서는 상품 이름으로 상품 아이디를 얻어오고 고객 이름으로 고객 아이디를 얻어와서 AddSale 저장 프로시저를 사용합시다.

ALTER PROCEDURE dbo.AddSale2	
	(
	@PNAME varchar(50),
	@CNAME varchar(50),
	@COUNT int OUTPUT
	)	
AS
	declare @PID int
	declare @CID int
	Exec FindCIDByName @CNAME,@CID output
	IF @CID = -1
		BEGIN
		set @COUNT = -1 
		RETURN
		END
	Exec FindPIDByName @PNAME,@PID output
	IF @PID = -1
		BEGIN
		set @COUNT = -1 
		RETURN
		END
	Exec AddSale @PID, @CID, @COUNT output
	RETURN