프로그래밍.../PostgreSQL | Posted by 고기킬러 2009. 12. 31. 15:26

트리거 (Trigger) 예제


SQL : TRIGGER : TRIGGER.

 

-- [0] 트리거 연습용 테이블 생성
-- DROP TABLE dbo.[구매테이블]

CREATE TABLE dbo.[구매테이블]
(
 CustomerID int, ProductID int, Quantity int
)
GO


-- DROP TABLE dbo.[재고테이블]
CREATE TABLE dbo.[재고테이블]
(
 ProductID int,
 Quantity int
)
GO

 

-- [1] 재고테이블에 1번, 2번 제품을 10개 넣어 놓음(가상)
INSERT [재고테이블] VALUES(1, 10)
INSERT [재고테이블] VALUES(2, 10)
SELECT * FROM [재고테이블]

 

-- [2] 구매가 한번 이루어지면 자동으로 구매테이블에서 감소시키는 트리거 작성
CREATE TRIGGER [자동재고감소]
ON [구매테이블]
FOR INSERT
AS
 UPDATE [재고테이블] SET Quantity = Quantity -1
 PRINT '재고테이블에서 1개 감소했습니다.'

 

-- [3] 구매 테이블에 INSERT문을 실행시켜본다.
INSERT [구매테이블] VALUES(1,1,1)

 

-- [4] 트리거에의해 재고테이블의 모든 필드값이 자동으로 감소됨을 알 수 있다.
SELECT * FROM [재고테이블]

 

-- [5] 트리거를 수정해보자: 구매개수만큼 줄이도록 수정
ALTER TRIGGER [자동재고감소]
ON [구매테이블]
FOR INSERT
AS
 DECLARE @ProductID int, @Quantity int
 SET @ProductID = 0
 SET @Quantity = 0
 SELECT @ProductID = ProductID, @Quantity = Quantity
 FROM INSERTED  --INSERTED에 의해서 입력된 데이터 받아옴

 UPDATE [재고테이블] SET Quantity = Quantity - @Quantity
 WHERE ProductID = @ProductID
GO

 

-- [6] 1번 제품만을 1개 감소
INSERT [구매테이블] VALUES(1,1,1)
SELECT * FROM [재고테이블]

 

-- [7] 2번 제품만을 3개 감소
INSERT [구매테이블] VALUES(1,2,3)
SELECT * FROM [재고테이블]

 

-- [8] 트리거 삭제
DROP TRIGGER [자동재고감소]

 

-- [!] [자동재고감소]와 동일한 기능을 하는 입력 저장 프로시저
Create Procedure dbo.[자동재고감소프로시저]
 @CustomerID  Int,
 @ProductID    Int,
 @Quantity   Int
As
Begin Tran
 Insert [구매테이블]
 Values
 (
  @CustomerID,
  @ProductID,
  @Quantity
 )

 UPDATE [재고테이블]
 SET Quantity = Quantity - @Quantity
 WHERE ProductID = @ProductID

 Select * From [재고테이블]
Commit Tran
Go

Exec [자동재고감소프로시저] 1, 1, 1

'프로그래밍... > PostgreSQL' 카테고리의 다른 글

PostgreSQL with PHP  (0) 2010.01.08
PostgreSQL 설치및 기본 사용법  (0) 2010.01.08
PL/pgSQL이란?  (0) 2009.12.22
PostgreSQL의 PL/PgSQL 사용법  (0) 2009.12.22
PostgreSQL 언어의 사용법 (PL/PgSQL)  (0) 2009.12.22