--票的余数表 create table ticket( train_no number(2) primary key,--车次 train_name varchar2(30), remain_sl number(3)); insert into ticket values ( 1,'北京-长沙',3); --告诉顾客票的余数的时候 select remain_sl from ticket where train_no = 1 ; -- --写订票的存储过程 create or replace procedure get_ticket(no number) as sl number; no_ticket exception; begin --<1>查出余数(加锁) select remain_sl into sl from ticket where train_no = no for update; --<2>判断余数的数量 if sl > 0 then --修改 update ticket set remain_sl =remain_sl - 1 where train_no = no; dbms_output.put_line('订票成功'); else raise no_ticket; end if; --<3> commit; --必须的 exception when no_ticket then raise_application_error(-20001,'票已经售完了'); rollback; --很关键的,解除锁 end;