FireBird Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
파이어버드 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
IBPhoenix
FireBird Main site
볼랜드포럼 광고 모집

FireBird Q&A
[4634] Re:Re:SELECT 시에 트랜젝션처리 문의
까막.윤창희 [ggamagui] 1914 읽음    2013-08-23 11:39
델맨 님이 쓰신 글 :
: 자답입니다. --;
: 검색 해보니 FB에서는 위와 같은 처리가 서버 자체적으로 해결이 되지 않네요.
: 프로그램상에서 업데이트시 중복에러가 나면 그때 다시 한번 새로운 PKEY를
: 가지고 와서 처리하는 채번 알고리즘을 구현 해야하나 봅니다.
:
: MS-SQL에서는 서버 자체적으로 된다고 하네요...
: 아쉽습니다.

안녕하세요. 까막입니다.

SELECT 는 보통 공유 잠금이라고 하나요? 잠금 설정을 해도 다른 곳에서도 읽을 수 있도록 합니다.
그게 아니면 DB 를 한사람씩 밖에는 쓰지 못하는 상황이 되는 거니까요.

접근 방식을 달리 해보시는 것이 어떨까 싶습니다.
키를 구하기 위한 것이라면 등록 작업을 하려고 할 때 미리 구하는 것이 아닌, 실제 등록을 했을 때 구하는 방식으로 바꾸시는 게 더 좋아 보입니다.

미리 키값을 구한다면 보통 쓰는 방식이..
DB 에 MAX 값이 25 라면 거기에 1을 더해서 26 이라는 값을 가지고 작업하는 형태가 되겠죠.
그런데, 입력 작업을 하는 사람이 여러명이라면 그 여러명이 모두 26 이라는 값을 가지고 작업을 한다는 거죠.
분명 저장할 때, 문제가 생기는 방식입니다.

보통 입력 작업을 할 때는 키값을 미리 가지고 있을 필요가 없습니다.
입력 작업을 다 하고, 최종 적으로 저장(등록 등등..)을 하는 순간에 DB 에서 키값을 구하면 되는 것이거든요.
여러 사람이 동시에 저장 버튼을 누른다고 해도, 그게 밀리초 단위까지 같을 수는 없으므로 이렇게 구현을 하면 키값 중복으로 인한 문제는 없어집니다.

그리고, 이렇게 DB 에서 저장한 순간에 만들어지는 키값도 리턴 받을 수 있습니다.
OUTPUT 처리를 하시면 쉽게 리턴 받을 수 있죠.
프로시저 구문을 참조해 보시면 나옵니다.


해결 방안은 찾고도 남을 정도로 시간이 지난 시점이지만, 다른 분들도 참고할 수 있으므로 적어 봅니다.



혼이 살아 있을까... 대한민국.

+ -

관련 글 리스트
4608 SELECT 시에 트랜젝션처리 문의 델맨 2267 2013/05/13
4609     Re:SELECT 시에 트랜젝션처리 문의 델맨 2045 2013/05/13
4634         Re:Re:SELECT 시에 트랜젝션처리 문의 까막.윤창희 1914 2013/08/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.