[조언구합니다] SEQ따오기.시퀀스. 0 3 2,165

by 이상민 [2008.02.12 15:51:01]


일단 현재는..

1. For문 (출고)

2. For문 (SEQ따오기->입고)

이런 식으로 구성되어 있는데요.

 

여기서 SEQ를 따올 때, 시퀀스테이블을 두고 For Update 문을 사용해서

Max값을 가져오고, 시퀀스테이블은 Max값으로 Update하는 방법입니다.

 

문제는 여기서 Seq를 가져오고 나서 Commit을 실행하는데

(이유는 For문이라 다음 녀석도 SEQ를 가져오기 위해서)

그러다보니 중간에서 에러가 발생해서 RollBack을 하면..

;;출고만 되어있는등에 문제가 발생하더라구요..

 

그래서 변경하는 방안을 생각해봤는데..

 

1. 필요한 갯수 만큼 Seq를 미리따서 그 다음 For(입고, 출고) 처리를 한다.

2. Max값을 직접 가져오도록 한다.

3. For(seq ->출고 ->입고)순으로 처리. 그러면;중간에 에러나면 출고 한쪽만

   있는 경우는 없겠죠;;물론 다 RollBack처리가 안되지만^_^;;;

 

아무래도 1번이 좋은것 같은데..

혹시 이것 말고 번뜩하는 그런 방법은 없을까요~

Commit은 부분적으로 한다던지;;예를 들어 Table별로(찾아보니;없더라구요)

아니면 보통 이런방식으로 처리한다던지..

 

이런 commit상식을 알아두면 좋다던지~!

^_^머든지 조언구합니당~!!

 

 

P/S 제가 파워빌더로 작업중 인데

      트랜잭션 별로 Commit과 RollBack이 가능한지 궁금합니다.

      SP에서 Commit을 했더니;;트랜잭션하고는 상관없이 모두 되더라구요

      ㅠ _ ㅠ

by finecomp [2008.02.12 00:00:00]
4. Application을 최대한 튜닝하여 수행성능을 극대화한 후 모든작업을 마치고 맨 마지막에 한번만 commit (권장)

5. 시퀀스테이블대신 오라클의 Sequence Object사용 고려

6. 각 입력된 Set별 commit으로 로직 변경
이것은 먼저 왜 출고와 입고를 for로 함께 돌리는지에 대한 정확한 요건규명이 필요합니다.
for문
{
// 출고처리

// Max_seq 추출
SELECT FOR Update~

//입고
INSERT INTO A
SELECT col1, max_seq
FROM ~

commit;
}

참고만 하세요...;

by finecomp [2008.02.12 00:00:00]
PS) 추가가 있었군요...^^;

SP내에서 중간에 commit이나 rollback을 수행하면 그 순간 바로 commit, rollback 됩니다.

일반적인 트랜잭션레벨의 사용은,
BEGIN TRAN

SP등 로직(내부엔 commit, rollback 없음)
if (결과코드 정상코드)
{
ROLLBACK TRAN
}
ELSE
{
COMMIT TRAN
}

입니당

by 이상민 [2008.02.12 00:00:00]
흠~오라클 Sequence Object라^_^그것도 공부해봐야겠네요.그리고 역시;-_-sp에서 commit이 왕이군요;읔
답변 감사드립니다!!( _ _ ) 좋은하루되세요~!!
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입