행 트리거시 중복된 데이타를 거르는 방법이 있을까요? 1 3 2,305

by 미소가인 [2013.11.11 10:19:22]


1.업무
A처리 내역에서   최종처리상태를 알고자 B집계테이블에 최종 상태를 저장하고자 트리거를 작성하여
A 처리내역에서 테이터가 변경이 있을경우 B집계테이블에 처리상태를 업데이트하고자합니다.

문제점은 A 처리내역 같은건이 여러건이  존재하여 B집계테이블에 매번 업데이트가 발생하여 부하를 주어
이를 해결하고자 합니다.

<현재> 같은코드로 여러번 입력건이 발생함.
INSERT INTO A처리내역 (주문코드,처리상태) VALUES ('1000','등록');-- 트리거 발생하여 B집계테이블에 주문코드 1000번의 최종상태를  '등록' 으로 UPDATE
INSERT INTO A처리내역 (주문코드,처리상태) VALUES ('1000','등록');-- 트리거 발생하여 B집계테이블에 주문코드 1000번의 최종상태를  '등록' 으로 UPDATE
INSERT INTO A처리내역 (주문코드,처리상태) VALUES ('1000','등록');-- 트리거 발생하여 B집계테이블에 주문코드 1000번의 최종상태를  '등록' 으로 UPDATE
INSERT INTO A처리내역 (주문코드,처리상태) VALUES ('1000','등록');-- 트리거 발생하여 B집계테이블에 주문코드 1000번의 최종상태를  '등록' 으로 UPDATE
INSERT INTO A처리내역 (주문코드,처리상태) VALUES ('1000','등록');-- 트리거 발생하여 B집계테이블에 주문코드 1000번의 최종상태를  '등록' 으로 UPDATE
INSERT INTO A처리내역 (주문코드,처리상태) VALUES ('1000','등록');-- 트리거 발생하여 B집계테이블에 주문코드 1000번의 최종상태를  '등록' 으로 UPDATE
INSERT INTO A처리내역 (주문코드,처리상태) VALUES ('1000','등록');-- 트리거 발생하여 B집계테이블에 주문코드 1000번의 최종상태를  '등록' 으로 UPDATE
INSERT INTO A처리내역 (주문코드,처리상태) VALUES ('1000','등록');-- 트리거 발생하여 B집계테이블에 주문코드 1000번의 최종상태를  '등록' 으로 UPDATE
..... N번 등록되어 반복

<목표>
INSERT INTO A처리내역 (주문코드,처리상태) VALUES ('1000','등록');-- 트리거 발생하여 B집계테이블에 주문코드 1000번의 최종상태를  '등록' 으로 UPDATE
INSERT INTO A처리내역 (주문코드,처리상태) VALUES ('1000','등록');-- 이미 업데이트 되었음으로 트리거 무시
INSERT INTO A처리내역 (주문코드,처리상태) VALUES ('1000','등록');-- 이미 업데이트 되었음으로 트리거 무시
INSERT INTO A처리내역 (주문코드,처리상태) VALUES ('1000','등록');-- 이미 업데이트 되었음으로 트리거 무시
INSERT INTO A처리내역 (주문코드,처리상태) VALUES ('1000','등록');-- 이미 업데이트 되었음으로 트리거 무시
INSERT INTO A처리내역 (주문코드,처리상태) VALUES ('1000','등록');-- 이미 업데이트 되었음으로 트리거 무시
INSERT INTO A처리내역 (주문코드,처리상태) VALUES ('1000','등록');-- 이미 업데이트 되었음으로 트리거 무시
INSERT INTO A처리내역 (주문코드,처리상태) VALUES ('1000','등록');-- 이미 업데이트 되었음으로 트리거 무시

방법이 있을까요?

2.트리거 정보 트리거는 행트리거,AFTER로 작동중입니다.

by 임상준 [2013.11.11 10:31:05]
a 테이블에서는 중복된 행을 뭘로 구분하나요?;;;;

by 미소가인 [2013.11.11 10:33:29]

주문상품코드입니다.
한 주문상품코드에 여러명의 주문건이 있습니다.


by feelie [2013.11.11 12:51:44]

A테이블은 처리내역 테이블이고, 고객이 주문한 주문 내역 인것 같구요.
B테이블은 A테이블을 통해 집계한 테이블이고 집계 단위가 주문 상품코드 인것 같은데요.
(B테이블에 상품코드의 최종 상태를 관리하신다고 하니...)

상품코드에 대한 최종상태 코드가 어떤것일까요?

상품이 재고있음, 재고 없음, 품절 이런 의미라면  주문내역에서 관리하리하는것이 아니라
상위의 테이블에서 상태를 관리해야 할듯합니다...(예: 상품코드 테이블, 상품코드이력 테이블)

주문내역에는 하나의 상품에 대하여 여러 고객이 주문할수있고, 한고객이 주문한 상품에 대하여 상태를 관리한다면 주문내역을 보는것이 맞을것 같습니다.(이력이든, 최종상태만 관리되겠죠...)

최종상태코드가 어떤 테이블(엔티티)에서 관리되어야 하는지를 정확히 정의하시고 나서
해결방법을 찾으셔야 할듯합니다. ( 모델변경, SQL변경)




 
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입