||
在度量快速开发平台中,有些界面可能需要对数据实时要求较高。例如系统内有一个商品销售功能,各个销售点需要对商品进行销售,在各个点进行抢购的时候,就需要考虑并发性,避免抢购的瞬间出现重复购买。 实现思路: 直接利用数据库的锁定功能实现,如果涉及到多个表或者数据的更新,可以采用存储过程实现。 下面是一个存储过程示例及调用这个存储过程的方法: 1、存储过程代码: create or replace procedure TRANSTESTTT(IN_ARTCODE in varchar2, RETURNSTR out varchar2) is l_value number(2) := 0; begin select status into l_value from TRANSTEST where namex = IN_ARTCODE for update nowait; if l_value = 1 then update TRANSTEST set status = 3, sdate = sysdate, ccount = ccount + 1 where namex = IN_ARTCODE; else RETURNSTR := '已经被处理!'; return; end if; dbms_lock.sleep(10); commit; RETURNSTR := '操作成功!'; exception WHEN OTHERS THEN RETURNSTR := '其他人正在操作!'; end TRANSTESTTT; 2、开发平台代码: '调用存储过程,注意存储过程名称字符大小写问题 dim sp=CreateProcedure("default","TRANSTESTTT") '传入存储过程参数(类型与值) sp.AddInputParam("IN_ARTCODE",22,"AAA") '定义传出参数(类型与长度) sp.AddOutputParam("RETURNSTR",22,1000) 'Execute 执行存储过程,传入参数指示是否提交事务(True表示提交事务,) sp.Execute(false) '获取传出参数 dim outvalue =sp.GetOutPraramValue("RETURNSTR") showmessage(outvalue) 如果开发平台中的这个功能是一个按钮,这样,在各个销售点销售的时候,即使多个人同时点击该功能按钮,也能控制只能一个人能购买成功。 |
Powered by Discuz! X3.2
© 2001-2013 Comsenz Inc.