SELECT COUNT(ai.autobuyid) INTO v_follnum FROM Autobuyinfo ai WHERE ai.gameid=pi_gameid AND
ai.casttype=pi_casttype AND ai.superuserid=pi_superid AND ai.followtype=0;
SELECT ar.maxfollownum INTO v_rulenum FROM Autobuyrule ar WHERE ar.gameid=pi_gameid AND
ar.casttype=pi_casttype;
IF v_follnum >= v_rulenum THEN
po_errdesc:='订单人数已满,不可再订制跟单';
po_errcode:=-6;
raise DEFERROR;
END IF;
--添加自动跟单
INSERT INTO Autobuyinfo ai
(ai.autobuyid,ai.followuserid,superuserid,ai.gameid,ai.casttype,ai.minfollowmoney,
ai.maxfollowmoney,ai.followmoney,ai.isnofull,ai.followtype,ai.sort)
VALUES(SEQ_USERINFO_ID.NEXTVAL,pi_userid, pi_superid,pi_gameid,pi_casttype,pi_minmoney,
pi_maxmoney,pi_eachBuy,pi_nofullbuy,pi_type,pi_sort);
在高并发的情况下,订单人数往往要多于规定的最大的跟单人数,怎样解决这个问题???????
ai.casttype=pi_casttype AND ai.superuserid=pi_superid AND ai.followtype=0;
SELECT ar.maxfollownum INTO v_rulenum FROM Autobuyrule ar WHERE ar.gameid=pi_gameid AND
ar.casttype=pi_casttype;
IF v_follnum >= v_rulenum THEN
po_errdesc:='订单人数已满,不可再订制跟单';
po_errcode:=-6;
raise DEFERROR;
END IF;
--添加自动跟单
INSERT INTO Autobuyinfo ai
(ai.autobuyid,ai.followuserid,superuserid,ai.gameid,ai.casttype,ai.minfollowmoney,
ai.maxfollowmoney,ai.followmoney,ai.isnofull,ai.followtype,ai.sort)
VALUES(SEQ_USERINFO_ID.NEXTVAL,pi_userid, pi_superid,pi_gameid,pi_casttype,pi_minmoney,
pi_maxmoney,pi_eachBuy,pi_nofullbuy,pi_type,pi_sort);
在高并发的情况下,订单人数往往要多于规定的最大的跟单人数,怎样解决这个问题???????
◎ 偷懒的方法就是先主动锁表,但高并发性能极差。
◎ 不偷懒的方式就是把 后面的Insert 和 前面的Select 写成一句话,根据插入数量来判断是否下单成功。