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

델파이 Q&A
Delphi Programming Q&A
[13419] Re:Database programming에서..
아이에스 [jeju123] 1679 읽음    2010-09-16 17:47
이런경우 일반적으로 제네레이터 혹은 시퀀스를 정의하고
트리거로 증가시켜주면 (CREATE TRIGGER.... ACTIVE BEFORE INSERT...) 편하실듯......

------------------------------------------------------------------------------

seg 님이 쓰신 글 :
: 안녕하세요
: DB (Interbase) 프로그래밍을 할 때 key 값을 계속 1씩 증가시키는 걸 하려고 합니다.
:
: 전체적인 로직은 다음과 같습니다. SQL문을 사용해 기존의 최대값을 뽑아서  1을 더해 저장하려는 것인데요,
:
:
: with ibq1 do begin
:    sql := 'select Max(idvalue) from AnyTable  where dept=1';
:    Open;
:  
:    a :=  Fields[0].Asinteger + 1;
:
:    SQL.Text := format('insert into AnyTable (idvalue) values (%d)', [a]); 
:    ExecSQL;
: end;
:
: 그런데 이런 식으로 할 경우 이 두 SQL 문장이 실행되는 도중에 딴 record 가 입력이 되면, idvalue 가 중복이 되는 사태가 벌어질 수 있을 것 같습니다.
:
: 그래서 Interbase 의  stored procedure 로 작성하면 되는 것인지 알고 싶습니다.
:
:
: select max(idvalue) from anytable where dept=1 into :imax;
: insert into anytable (idvalue) values (:imax+1);
:
: 처럼 말이죠.
:
:
: 그런데 stored procedure 의 경우에도 이 두 개의 SQL 문장 사이에 다시 stored procedure가 호출되면, 같은 idvalue가 생성되거나 할 가능성이 없는지요.
:
: 또 이런 경우 보통 어떻게 해결하는지.. 테이블 전체에 해당되는 것이 아니라, 위에서 보시듯 dept 등 각 조건에 따라 1부터 차례로 값을 주고자 합니다.

+ -

관련 글 리스트
13418 Database programming에서.. seg 1608 2010/09/16
13432     Re:Database programming에서.. (자답) seg 1677 2010/10/05
13431     Re:Database programming에서.. 아폴론 1584 2010/10/05
13419     Re:Database programming에서.. 아이에스 1679 2010/09/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.