问题:
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条)中对应的字段中。
没分发不了提问,有请大神指教一二。