트리거로 재고 관리 for PostgreSQL13

트리거로 재고 관리 for PostgreSQL13



PostgreSQL13의 트리거를 사용하여 재고 증감 로직을 작성해보십시오



PostgreSQL 버전 13.2
pgAdmin4 버전 5.3
에서 시도했습니다.

트리거 사양



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

개념도





트리거 사양



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

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

합니다.



1. 상품 테이블 작성 tbl_items


create table tbl_items (
    i1_id    integer primary key,
    i1_name  text, 
    i1_updd  date,  
    i1_price integer, 
    i1_stk   DECIMAL(18,0) NOT NULL default 0, 
    i1_stk2  DECIMAL(18,0) NOT NULL default 0
);

2. 전표 테이블 작성 tbl_items


create table tbl_slp2(
    s2_date date ,
    s2_id   integer , 
    s2_qty  DECIMAL(18,0) NOT NULL default 0
);

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



전표 데이터가 추가되면 상품 테이프의 재고를 줄이고 최종 업데이트 날짜를 변경합니다.

※PostgreSQL에서는, 최초로 함수를 만든다


create function trg_slp_ins() returns trigger as $tri_term$
begin
    update tbl_items
    set  i1_stk2 =  i1_stk2 - new.s2_qty,
    i1_updd = date('now') 
    where i1_id=new.s2_id;
  return null;
end
$tri_term$ language plpgsql

※ 재고 감소 기능으로 트리거 설정


create trigger  trg_slip_ins after insert on tbl_slp2
 for each row execute procedure  trg_slp_ins()

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



전표 품목 데이터가 삭제되면 상품 테이프의 재고가 증가하고 최종 갱신 날짜가 변경됩니다.

※PostgreSQL에서는, 최초로 함수를 만든다


create function trg_slp_del() returns trigger as $tri_term$
begin
    update tbl_items
    set  i1_stk2 =  i1_stk2 + old.s2_qty,
    i1_updd = date('now') 
    where i1_id=old.s2_id;
  return null;
end
$tri_term$ language plpgsql

※재고 증가 기능으로 트리거 설정


create trigger  trg_slip_del after delete on tbl_slp2
 for each row execute procedure  trg_slp_del()

5. 상품의 초기 등록


insert into tbl_items values (1 , 'さかな','2021-02-01', 1234, 10,0);
insert into tbl_items values (2 , 'テレビ','2021-03-01', 2222, 20,0);
insert into tbl_items values (3 , '保管庫',current_date , 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),
    (current_date,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 (current_date      ,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;

트리거로 재고 관리 for SQLite3
의 PostgreSQL판입니다, SQL문의 copipe로 동작하기 때문에, 데이타베이스로의 SQL문의 쓰는 방법의 조금의 차이나, 데이타베이스 초학자의 쪽의 참고나 업무 처리로의 힌트가 되면 다행입니다.

또, 기술에 실수가 있으면, 지적해 주세요.

pgAdmin4의 이미지와 함께, 좀 더 자세한 기사는:a23note

좋은 웹페이지 즐겨찾기