Oracle编程,遇到并发的情况处理
2015-07-20 22:13
411 查看
在实际业务处理,特别是在统计报表数据时,经常会遇到并发的情况。
在实际工作中,我遇到过类似的情况,大概情况是这样的:
在统计报表的时候需要,用户前台点击生成,当2个用户登陆,同时点击报表生成时,会出现报表数据重复的现在。这当然是,一个用户点击生成时,后台数据还没有完全跑完,然后有一个用户点击,又重新跑刚才的同一个过程,并且入参都一样,这就导致重复数据的出现。
现在想到一个处理方法如下:
create table tb_test (is_yx varchar2(1));
select t.is_yx into vi_result1
from tb_test t;
if vi_result1=1 then
loop
select t.is_yx into vi_result1
from tb_test t;
if vi_result1=1 then
select sysdate into start_time from dual;
loop
select sysdate into end_time from dual;
exit when (end_time-start_time)*24*60*60 >=60;
end loop;
else
exit;
end if;
end loop;
end if;
在过程里,处理数据前加上该段判断,紧接着
update tb_test t set t.is_yx=1;
commit;
数据处理完再做如下处理
update tb_test t set t.is_yx=0;
commit;
这样就可以一直等待该数据处理完再处理下一个
在实际工作中,我遇到过类似的情况,大概情况是这样的:
在统计报表的时候需要,用户前台点击生成,当2个用户登陆,同时点击报表生成时,会出现报表数据重复的现在。这当然是,一个用户点击生成时,后台数据还没有完全跑完,然后有一个用户点击,又重新跑刚才的同一个过程,并且入参都一样,这就导致重复数据的出现。
现在想到一个处理方法如下:
create table tb_test (is_yx varchar2(1));
select t.is_yx into vi_result1
from tb_test t;
if vi_result1=1 then
loop
select t.is_yx into vi_result1
from tb_test t;
if vi_result1=1 then
select sysdate into start_time from dual;
loop
select sysdate into end_time from dual;
exit when (end_time-start_time)*24*60*60 >=60;
end loop;
else
exit;
end if;
end loop;
end if;
在过程里,处理数据前加上该段判断,紧接着
update tb_test t set t.is_yx=1;
commit;
数据处理完再做如下处理
update tb_test t set t.is_yx=0;
commit;
这样就可以一直等待该数据处理完再处理下一个
相关文章推荐
- 【Navicat连接Oracle数据库】-Navicat连接Oracle数据库设置
- Oracle的触发器
- 如何重置oracle 10g SYS用户的密码
- ORACLE管理-查看拥有DBA角色的用户
- oracle 10g 恢复dmp文件。
- oracle中的varchar2存放汉字的问题总结
- 【Oracle 集群】Oracle 11G RAC教程之集群安装(七)
- CentOS(五)--Oracle安装
- oracle创建表空间和用户
- ORACLE 归档日志打开关闭方法
- oracle实例名,服务名等概念区别与联系
- row_number() over (partition by....order by...)用法
- Oracle循环语句
- oracle 相关语句
- Oracle随机函数之dbms_random使用详解
- oracle sql 内连接 左外连接 右外连接 全外连接
- Oracle pl/sql导入sql文件,插入更新数据,中文乱码问题解决方案
- oracle实例内存(SGA和PGA)调整
- 转:Hbase与Oracle比较(列式数据库与行式数据库)
- [Oracle 10g会有的一个错误]ORA-00988: 口令缺失或无效