트리거로 재고 관리 for SQLite3

SQLite3 트리거를 사용하여 인벤토리 증감 로직 만들기



SQLite 버전 3.35.5.
DB Browser for SQLite, 버전 3.12.2
에서 시도했습니다.

트리거 사양



전표 데이터가 추가되면 상품 테이프의 재고를 줄이고 최종 업데이트 날짜를 변경합니다.
전표 데이터가 삭제되면, 상품 테이프의 재고를 늘려 최종 갱신일을 변경한다.

개념도





트리거 사양



전표 데이터가 추가되면 상품 테이프의 재고를 줄이고 최종 업데이트 날짜를 변경합니다.
전표 데이터가 삭제되면, 상품 테이프의 재고를 늘려 최종 갱신일을 변경한다.

만들 데이터베이스 이름 Inventory_Control_test
만들 테이블
 상품 테이블 tbl_items
"전표 테이블"tbl_slp2
합니다.

1. 상품 테이블 작성 tbl_items


create table tbl_items (
    i1_id    integer primary key,
    i1_name  text, 
    i1_updd  datetime,  
    i1_price integer, 
    i1_stk   real, 
    i1_stk2  real
);

2. 전표 테이블 작성 tbl_items


create table tbl_slp2(
    s2_date datetime ,
    s2_id   integer , 
    s2_qty  real
);

3. 전표 데이터 추가 트리거 작성



전표 데이터가 추가되면 상품 테이프의 재고를 줄이고 최종 업데이트 날짜를 변경합니다.
create trigger s2ins insert on tbl_slp2
begin
 update tbl_items set i1_stk2 = i1_stk2-new.s2_qty,
 i1_updd = date('now') 
 where i1_id = new.s2_id;
end;

4. 전표 데이터 삭제의 트리거 작성



전표 품목 데이터가 삭제되면 상품 테이프의 인벤토리를 늘리고 최종 업데이트 날짜를 변경합니다.
create trigger s2del delete on tbl_slp2
begin
 update tbl_items set i1_stk2 = i1_stk2+Old.s2_qty,
 i1_updd = date('now') 
 where i1_id = old.s2_id;
end;

5. 상품의 초기 등록


insert into tbl_items values (1 , 'さかな',date('2021-02-01'), 1234, 10,0);
insert into tbl_items values (2 , 'テレビ',date('2021-03-01'), 2222, 20,0);
insert into tbl_items values (3 , '保管庫',date('now'), 3333,  30,0);

6. 상품 재고 수를 확인


select i1_id,i1_name,i1_price,i1_updd,i1_stk,i1_stk2,(i1_stk+i1_stk2)As stk3 from tbl_items
order by i1_id;

7. "전표 데이터 추가"



상품 id 3 1
상품 id 1을 1과 2와 3을 날짜를 바꾸어 추가
SQL 문의 설명을 조금 바꾸고 두 번 실행해 보겠습니다.
INSERT INTO tbl_slp2
    (s2_date,s2_id, s2_qty)
VALUES
    ('2021-02-02',3 , 1),
    ('2021-02-02',1 , 1),
    ('2021-03-03',1 , 2),
    (date('now') ,1 , 3);

두 번째
insert into tbl_slp2 values (date('2021-02-02'),3 , 2);
insert into tbl_slp2 values (date('2021-02-02'),1 , 2);
insert into tbl_slp2 values (date('2021-03-03'),1 , 3);
insert into tbl_slp2 values (date('now')       ,1 , 4);

8. 전표 데이터의 입력 내용을 확인 (수량의 합계는 18)


SELECT * FROM tbl_slp2
order by s2_date,s2_id;

9.상품 재고수를 확인  (입출하수의 합계-18)


select i1_id,i1_name,i1_price,i1_updd,i1_stk,i1_stk2,(i1_stk+i1_stk2)As stk3 from tbl_items
order by i1_id;

10. 전표 데이터의 데이터 삭제


delete from tbl_slp2 where s2_date=date('2021-03-03')

삭제의 대상이 되는 것은, 상품 id=1수량=2과 수량=3의 2행
('2021-03-03',1, 2)
('2021-03-03',1, 3)
품목 데이터 삭제 수량은 5

11. 전표 명세서 데이터의 입력 내용을 확인 (수량의 합계 13)


select * from tbl_slp2
order by s2_date,s2_id;

12.상품 재고수를 확인  (입출하수의 합계-13)


select i1_id,i1_name,i1_price,i1_updd,i1_stk,i1_stk2,(i1_stk+i1_stk2)As stk3 from tbl_items
order by i1_id;


이러한 사용방법도 업무처리에서의 힌트가 되면 다행입니다, 또, 기술에 실수가 있으면, 지적해 주십시오.

DB Browser for SQLite의 이미지와 함께 좀 더 자세한 기사는 : a23note

좋은 웹페이지 즐겨찾기