当前位置:我的异常网» Oracle开发 » 关于存储过程并发处理解决方案

关于存储过程并发处理解决方案

www.myexceptions.net  网友分享于:2013-01-05  浏览:116次

关于存储过程并发处理

想测试一下存储过程处理过程中,另一个进程也调用了当前存储过程时,数据一致性的问题,现做了以下测试:

创建表A100(可理解成库存总量表) C1  varchar2(10) --产品编码

C2  number        --产品库存总量

A200(可理解成备品出入库记录表。暂时不考虑主键问题)

C1  varchar2(10)  --产品编码

C2  number         --出入库量

创建了两个存储过程SP_TEST1、SP_TEST2。两个存储过程大多数内容一样,只是SP_TEST1在Commit前多一条dbms_lock.sleep(5); 以模拟上一个处理尚未完成时,另一个处理又被调用。(存储过程见下面)

调用方法:执行SP_TEST1,紧接着执行SP_TEST2(在5秒钟之内),发现执行结果与预想的出入很大

1)第一次调用存储过程时,A100表会生成两条“产品编码”一样的记录,“产品库存总量”不同,分别是两个存储过程调用是赋的值

2)第二次(包括之后)调用时,尽管先执行的SP_TEST1,但A100表合计总量仍会漏掉SP_TEST1执行时赋予的参数量

请问:1)我这种实验方法本身有没有问题(即是否可以利用dbms_lock.sleep(5);模拟存储过程执行时间很长);

2)若我的方法没有问题,为什么并发执行时SP_TEST1的参数没有被统计并更新到表A100?

3)若我的存储过程有问题,如何编写才能避免存储过程并发调用时,库存量被错误计算(统计)?

--存储过程SP_TEST001

CREATE OR REPLACE PROCEDURE sp_test001

(vName in varchar2,vNumb in number)

is

begin

declare

vA1Rcount number;

begin

--判断A200表中是否有c1=vName的记录 如果有:update  没有:insert

insert into A200(c1,c2) values (vName,vNumb);

--判断A100表中是否有c1=vName的记录,如果有:update 没有:Insert

select count(1) into vA1Rcount from A100 where c1=vName;

if(vA1Rcount > 0) then

update A100 set c2=(select sum(nvl(c2,0)) from A200 where A200.c1 = A100.c1) where A100.c1=vName;

else

insert into A100(c1,c2,c3) values (vName,vNumb,0);

end if;

dbms_lock.sleep(5);

commit;

EXCEPTION WHEN OTHERS THEN

DECLARE

Err_msg varchar2(512):=sqlerrm;

BEGIN

Dbms_output.put_line('ORA Error message '||err_msg);

Rollback;

end;

end;

end;

--存储过程SP_TEST002

CREATE OR REPLACE PROCEDURE sp_test002

(vName in varchar2,vNumb in number)

is

begin

declare

vA1Rcount number;

begin

--判断A200表中是否有c1=vName的记录 如果有:update  没有:insert

insert into A200(c1,c2) values (vName,vNumb);

--判断A100表中是否有c1=vName的记录,如果有:update 没有:Insert

select count(1) into vA1Rcount from A100 where c1=vName;

if(vA1Rcount > 0) then

update A100 set c2=(select sum(nvl(c2,0)) from A200 where A200.c1 = A100.c1) where A100.c1=vName;

else

文章评论

oracle并发执行存储过程,关于存储过程并发处理解决方案相关推荐

  1. oracle打开缓慢,Oracle SQL执行缓慢的原因以及解决方案

    以下的文章抓哟是对Oracle SQL执行缓慢的原因的分析,如果Oracle数据库中的某张表的相关数据已是2亿多时,同时此表也创建了相关的4个独立的相关索引.由于业务方面的需要,每天需分两次向此表中插 ...

  2. oracle并发执行max,跪求大量并发执行insert into select语句的方案

    现在有数十万张表要从A库通过insert into tablename select * from tablename@dblink的方式导入到B库中. B机上80个cpu,160G内存.希望能够大量 ...

  3. oracle查看执行最慢与查询次数最多的sql语句及其执行速度很慢的问题分析

    oracle查看执行最慢与查询次数最多的sql语句 注:本文来源 于<oracle查看执行最慢与查询次数最多的sql语句> 前言 在ORACLE数据库应用调优中,一个SQL的执行次数/频率 ...

  4. oracle一条sql运行时间很长,oracle查看执行最慢与查询次数最多的sql语句及其执行速度很慢的问题分析...

    oracle查看执行最慢与查询次数最多的sql语句 前言 在ORACLE数据库应用调优中,一个SQL的执行次数/频率也是常常需要关注的,因为某个SQL执行太频繁,要么是由于应用设计有缺陷,需要在业务逻 ...

  5. oracle 别名 存储过程_oracle 存储过程 别名

    阿里云如何打破Oracle迁移上云的壁垒 2018第九届中国数据库技术大会,阿里云数据库产品专家萧少聪带来以阿里云如何打破Oracle迁移上云的壁垒为题的演讲.Oracle是指"数据库管理系 ...

  6. oracle存储过程 论文,Oracle中基于Java的存储过程开发_计算机论文

    论文导读::存储过程是一种数据库对象,将执行计划存储在数据库的服务器中,它的执行速度比独立执行同样的程序要快.任何一个设计良好的数据库应用程序都应该用到存储过程.存储过程可以使得对数据库的管理.显示关 ...

  7. oracle 存储过程 状态,查看ORACLE中正在运行的存储过程 | 学步园

    1.如何查看ORACLE中正在运行的存储过程 select owner,name from v$db_object_cache where type like '%PROCE%' and locks ...

  8. rono在oracle的作用_Oracle中存储过程的作用和用法

    存储过程是Oracle开发者在数据转换或查询报表时经常使用的方式之一.它就是想编程语言一样一旦运行成功,就可以被用户随时调用,这种方式极大的节省了用户的时间,也提高了程序的执行效率.存储过程在数据库开 ...

  9. oracle万能分页代码,Oracle万能分页法的存储过程

    Oracle万能分页法的存储过程 --创建一个包,在包中定义一个 游标类型 create or replace package testfenyepackage as type test Oracle ...

最新文章

  1. 梯度下降的线性回归用python_运用TensorFlow进行简单实现线性回归、梯度下降示例...
  2. 根据端口不同来切换站点_KVM切换器是什么,看懂这一篇就够
  3. CLR Essential Types
  4. mysql 优化300例_mysql的limit优化实例
  5. (2)Node.js介绍
  6. 苹果设备频繁杀后台问题在iOS 13.2.2正式版更新后得以抑制
  7. linux 修改bios信息,一种基于Linux系统通过IPMI工具修改BIOS选项的测试方法及系统_2017103901253_权利要求书_专利查询_专利网_钻瓜专利网...
  8. 问题六十八:着色模型(shading model)(2)——光照模型(Light model)
  9. oracle删除的数据没有commit,在Oracle中误删除数据后并commit后的数据恢复办法
  10. android应用调试之如何保存logcat日志到本地
  11. 2000-2019年中国地级市人均GDP
  12. LC152---乘积最大子数组
  13. android对话框activity,Android使用Activity用作弹出式对话框
  14. 关于浮动元素,你还在自己计算位置吗?来看看 Floating UI 吧
  15. Android中一个app启动另一个app的指定activity
  16. idea java: 错误: 不支持发行版本 17
  17. iOS 的看门狗机制
  18. Interviewing at Amazon — Leadership Principles Reading Notes
  19. 2018电子商务证书计算机基础知识,2018银行春招笔试高频考点—常识百科之计算机基础知识...
  20. Arduino设计 有害气体检测小车

热门文章

  1. 软件开发工具下载、破解-程序员专享
  2. UDP协议,ARP协议,ICMP协议
  3. 查看iPhone的iOS版本
  4. 台男子勒死女子两度奸尸 败露后还神色自若
  5. java web 限下载速,WebClient DownloadDataAsync当前下载速度
  6. Uva12412 师兄帮帮忙
  7. [java]01受检异常和非受检异常的区别
  8. C1能力认证任务训练攻略详解
  9. 金现代入选2022低代码企业50强
  10. 信息系统审计(IT审计)