oracle 隐式游游标+rowid进行存储过程批量更新慢,造成锁表,但是同样的执行语句单独在sql窗体中执行秒过

问题:
1.存储过程在执行时,A表长时间被锁。已确定无任何程式使用A表。
2.存储过程执行时间非常长。达到半小时以上。但是将begin end之间的代码放在PL/SQL sql窗体中单独执行却只需6秒则可完成所有更新。
3.在update 和insert中,未commit之前是全表锁定,还是只是对update语句中占用的记录进行锁定?如果我的表被锁了,其他程式如果向A表中写入记录,此时写入是等待还是将数据写入数据库的缓冲区?在update和insert执行时,表是否在瞬间是出于全表锁定状态的?
代码执行逻辑
存储过程:
Create or replace 。。。XXX
BEGIN
FOR CR IN (SELECT A.ROWID,B.VALUE1 FROM A,(SELECT C.VALUE1 FROM C,D,E WHERE 查询条件 ) B WHERE 查询条件)
LOOP
UPDATE A SET A.VALUE1 = B.VALUE1
WHERE
A.ROWID = CR.ROWID;
END LOOP;
commit;
END;
END XXX;
说明:
A表数据10W条,C表数据1000W+,D表数据1000W+,E表数据100W+,查询条件中有CDE关联的主键及索引,SELECT查询语句执行计划中COST值1000以内。
该语句查询的结果为10万条左右。
SELECT A.ROWID,B.VALUE1 FROM A,(SELECT C.VALUE1 FROM C,D,E WHERE 查询条件
需要将该语句查询结构更新到A表(10W条)中对应的字段中。

没分发不了提问,有请大神指教一二。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值