결재상태테이블 트리거 구조 궁금합니다. 0 3 1,498

by 엘시아 [PL/SQL] 트리거 오라클 신청서결재 [2021.04.14 10:43:26]


안녕하세요. 매번 개발할때마다 하다하다 안되면 도움을 구합니다 ㅠ..ㅜ

트리거 궁금한게 있어서 문의드립니다.

Table목록

근태신청서 A

근태취소신청 B

결재상태테이블 C

현재 시스템에서 근태신청서를 결재하면 결재상태 테이블상태값이 update가 됩니다. 키는 신청서번호로 조인되어 있습니다. 근태취소신청테이블에는 자기의 신청서번호와 취소하려는 근태신청서의 신청서번호를 가지고있습니다.

A와 C, A와B간에는 키가 신청서번호로 조인 되어있습니다.

결재라인에는 본인>팀장 등등해서 결재를 받아서 after update insert으로 트리거가 실행되는 구조입니다.

 

근태신청서가 결재완료가 되었는데, 시간이 지나서 근태취소신청서로 해당 근태를 취소하려고 근태취소신청서 기안후 결재가 완료했을 경우 트리거 이벤트가 발생하면서 근태신청서 결재완료가 났던 결재상태테이블의 결재상태를 "결재취소"라는 상태로 업데이트하고 싶습니다.

트리거 로직에 트리거안에 UPDATE문을 넣으니 안되더라구요..

트리거가 발생한 자신의 행을 수정하는 방법은 NEW값에 변경된 값을 넣으면 되는데

트리거행이 아닌 다른 키의 데이터 값에는 업데이트가 안되는 것같습니다....로직아래 후처리 프로시져도 있어서 프로시져내에도 업데이트문을 넣었는데도 안돌아갑니다..;

구글링을 계속해도 방법이 나오지 않아 질문드립니다. 방법이 없으면, 따로 서비스호출에서 UPDATE하는 로직을 구현해야할 것같습니다.

감사합니다.

by 마농 [2021.04.14 11:26:32]

1. 질문에 언급된 방식대로 하시면 됩니다.
- 안된다면 안되는 이유가 있겠죠?
- 오류 메시지를 확인해 보셔야 합니다.
2. 테이블 구조
- 결재상태테이블은 결재라인별 상태값이 저장될 듯 한데요?
- 결재라인별이 아닌 결재신청건에 대한 최종 상태는 신청테이블에 있는게 아닌지?
- 어디를 어떻게 업데이트 할 것인지? 업무 규칙이 명확하게 정해진 것인지?


by 엘시아 [2021.04.14 13:19:48]

1. 네 오류메시지가 따로 나진 않았는데, 라인찍어보겠습니다 ㅎㅎ

2. 테이블 구조
- 결재상태테이블은 결재라인별 상태값이 저장될 듯 한데요?

  -> 결재라인별 테이블도 있긴한데, 그부분까지 설명하지 않더라도 신청서 마스터테이블(결재상태테이블)로 임의로 설명드렸습니다..
- 결재라인별이 아닌 결재신청건에 대한 최종 상태는 신청테이블에 있는게 아닌지?

  -> 신청서마스터에 있습니다. ㅎㅎ..
- 어디를 어떻게 업데이트 할 것인지? 업무 규칙이 명확하게 정해진 것인지?

   ->이미 몇년간 잘 돌아가는 근태신청서 로직에 신청서마스터 결재상태코드만 트리거 시 업데이트하려고했던거라..

 

답변감사합니다 :)

 


by 마농 [2021.04.14 13:26:34]

설명이 잘 이해가 안가는데..
그럼 A 와 C 가 동일 테이블이라는 건가요?

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