* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
Window7 32bit, Linux 64bit 등 | |
[cubrid_rel] 수행 결과 | |
[도움말]-[버전정보] 확인 | |
java, php, odbc 등 입력 |
* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 | 재현 가능한 Source와 SQL |
관련 테이블(인덱스, 키정보 포함) 정보 | CUBRID 홈 디렉토리 아래 log 디렉토리 압축 |
-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
안녕하세요 큐브리드를 사용해서 개발중인데요.
트리거 이벤트 시점 관련해서 질문이 있습니다
생성하려는 트리거는
A 라는 DB의 TEST테이블의 업데이트가 발생이 되면
B 라는 외부DB의 TEST테이블(동일스키마)을 동기화 시키려는 트리거입니다.
트리거의 실행부분은 javaSP로 구현하였구요. 제가 작성한 SP만 CALL하면 잘 동작하는데 트리거에서 돌릴 때 트랜잭션에 관한 문제가 발생합니다.
javaSP로직은 해당 테이블의 pk를 던져주면
pk에 해당하는 레코드를 A DB에서 select하여 B db에 update치는 로직입니다.
CREATE TRIGGER updateTrigger
DEFERED UPDATE ON TEST
EXECUTE DEFERED javaSP
이런식으로 트리거를 생성 이후 TEST테이블에 UPDATE문을
1번 발생시키면 B DB에 레코드가 업데이트 되지않고
2번 발생시켜야 B DB에 업데이트가 됩니다.
아마 javaSP에서 A DB에 업데이트 된 레코드를 SELECT하는 시점에서, 트리거에 걸려 COMMIT 되지 않아 똑같은 값을 update하는 것으로 보여지는데요
update이벤트가 완전히 완료 된 시점에서 트리거의 실행부를 실행시킬 수 있는 이벤트 시점은 없나요??
(참고로 AFTER,BEFORE 다 테스트해봤습니다. 결과는 같습니다,
또한 insert 동기화 트리거는 위와 같은 맥략의 로직인데, DEFERED 키워드를 주었을때 바로 해결되었었습니다. 근데 update는 안되네요 ㅠ 무슨차이인지...)