2017-05-21 4 views
0

Available_Tickets 테이블에서 "임의"행을 선택하려면 저장 프로 시저를 사용하고 사용자가 번호를 좋아하는 경우 선택하고 티켓을 구입하면 행이됩니다. 테이블에서 삭제되었습니다.PL/SQL 프로 시저 데이터 고정 (무작위 로트 티켓 예약)

내 절차는 다음과 같습니다 : 사용자가 선택한 행을 삭제 반환 된 수에 동의

CREATE OR REPLACE GET_RANDOM_TICKET (RESULT OUT INTEGER) IS 
co,mn,mx integer; 
BEGIN 
SELECT COUNT(ID) , MIN(ID) ,MAX(ID) INTO CO,MN,MX FROM TICKETS; 

SELECT TICKET_NUMBER INTO RESULT FROM (
    SELECT TICKET_NUMBER 
     FROM TICKETS WHERE ID >= DBMS_RANDOM(MN,MX) 
) WHERE ROWNUM = 1; 
END GET_RANDOM_TICKET; 

합니다. 첫 번째 select 문을 실행 한 후 max (id)가있는 행이 삭제되는 최악의 시나리오를 사용할 수 있습니까?

편집 1 ---- 두 개의 SELECT 문이 테이블의 변경 사항과 동일한 데이터를 볼 수 있습니까? 그리고 왜?

답변

0

1) 사용자가 선택을 확인할 때까지 반환 된 티켓을 예약 됨으로 표시하기 위해 열 (티켓 상태 [무료, 예약 됨, 판매 됨])을 추가하십시오. 2) 업데이트 절에 커서를 사용하십시오 해당 티켓 상태 열을 사용자에게 반환 한 후 업데이트하십시오. 또한 무료 티켓 조건을 추가하십시오. 3) 사용자가 확인한 후 티켓 상태를 다시 확인하십시오. (2 명의 사용자가 동일한 시간에 프로그램을 실행하고 동일한 번호를 얻은 매우 슬림 한 기회에서 티켓이 더 이상 예약되지 않았기 때문에 오류 메시지가 수신되어야 함)

희망 사항 help

+0

답변에 코드를 추가해 주시겠습니까? 제가 삭제를 프로 시저 외부에서 수행했음을 확인하고 싶습니다. 따라서이를 업데이트로 변경하고 '업데이트 용'프로 시저 내에서 선택하면 잠금을 유지 하시겠습니까? – alibttb

+0

잠시만 죄송합니다. 삭제할 필요가 없습니다. 나중에 참조 할 수 있도록 판매 상태를 유지할 수 있습니다. –