database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 39507 게시물 읽기
No. 39507
오라클 동시성 제어 질문(수강 신청 관련)
작성자
천정대(gt1000)
작성일
2012-06-25 00:24
조회수
5,264

안녕하십니까?
수강 신청 프로그램을 작성하다 동시 접속자 처리 때문에 질문 올립니다.

대학 수강 신청 프로그램 강좌들이 있고, 학생들은 강좌를 수강 신청 할수 있습니다.
강좌는 선착순으로 지정된 인원만이 수강할수 있습니다.

강좌 테이블
create table lecture (
 lecture_id number  고유키
 lecture_name varchar2 강좌명
 entry_count number  수강인원
)

수강 신청자 테이블
create table lecture_entry (
 entry_id number  고유키
 user_id  varchar2 사용자 아이디
 lecture_id number  강좌 고유키(레프런스키)
)

예를 들어 수학강좌를 20명만 들을수 있다고 한다면

lecture 테이블에 아래와 같은 데이터가 들어가 있으며
lecture_id lecture_name entry_count
1  수학   20

lecture_entry 테이블에 데이터를 입력하는 것이 문제 입니다.
동시 접속자 처리 문제 입니다. 오라클 동시성 제어 관련 검색을 하고 있는데
잘 몰라서 헤매고 있습니다. 수학 과목 수강 신청을 한다면
1 lecture_entry 테이블에 수학 과목 등록 인원을 카운트 함
2 카운트 수가 lecture 테이블의 수학 수강인원 20명 보다 작으면
  lecture_entry 테이블에 insert, 크면 수강 인원 초과 예외 발생

CREATE OR REPLACE FUNCTION lecture_apply
     (v_lecture_id  number,  // 강좌 고유키
      v_user_id  varchar2(30) // 사용자 아이디
      v_entry_count  varchar2(3)) // 수강 인원
RETURN  varchar2
IS
     v_count   number;  // 현재 수강 신청자
     v_result  varchar2(1); // 결과
begin
     v_result = '0';
     select count(*) into v_count
     from lecture_entry
     where lecture_id := v_lecture_id
           for update nowait ;

     IF v_count < v_entry_count THEN
           insert into lecture_entry(entry_id, user_id, lecture_id)
           vales(seq_lecture_entry.nextVal, v_user_id, v_lecture_id);
           v_result = '1'; // 성공 
     ELSE
           v_result = '2'; // 정원초과 
     END IF;
 
      // 예외 발생시 v_result = '3'
 
      commit;
      return v_result;
end;

위와 같이 했을 경우
1 동시 접속자 처리가 잘 되는지가 궁금 합니다.
2 lecture_entry 테이블을 다른 페이지에서 조회, 삭제, 수정 등을 할텐데
  for update 때문에 dead lock 이나 심각한 속도 저하가 있는지 궁금합니다.

염치 없는 부탁이지만 친절한 설명과 조언을 좀 부탁 드리겠습니다.
좋은 하루 되십시요.

[Top]
No.
제목
작성자
작성일
조회
39512[질문] 저에게는 너무나도 어려운 쿼리 질문 입니다 ㅠㅠ [2]
솜사탕
2012-06-29
4611
39510코드값 맵핑 / 맵핑 관계 나타내는 방법 문의 [1]
쿼리OTL
2012-06-26
4384
39509쿼리가 힘드네여..ㅠ [3]
박진호
2012-06-26
5793
39507오라클 동시성 제어 질문(수강 신청 관련)
천정대
2012-06-25
5264
39506[오라클-쿼리문]필드에서 원하는 값을 추출을 하려는데 도움 부탁드립니다. [2]
신광열
2012-06-22
5155
3950510g 서버에서 익스포트한 덤프파일을 9i 서버로 임포트 가능한가요? [1]
때지
2012-06-21
4620
3950428945.테이블스페이스과 데이터파일 이동.... 한번 더 올립니다. [2]
초보
2012-06-21
4027
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다