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 |