一个存储过程如下:
CREATE OR REPLACE PROCEDURE AA_BB(OUTS OUT VARCHAR) IS
INSSQL VARCHAR2(4000);
BEGIN
INSSQL:='insert into city1 select id,cs from city where not exists(SELECT 1 FROM CITY1 WHERE CITY.ID= CITY1.ID)'; --把表city的数据 复制到city1中 id没有的,100万数据量 执行一次20秒。
EXECUTE IMMEDIATE INSSQL;
OUTS:=SQL%rowcount;
COMMIT;
END;这个村粗过程如果被2个页面同时执行的话,看到city1表里有200万数据。是并发导致吗?怎么改写这个存储过程。
CREATE OR REPLACE PROCEDURE AA_BB(OUTS OUT VARCHAR) IS
INSSQL VARCHAR2(4000);
BEGIN
INSSQL:='insert into city1 select id,cs from city where not exists(SELECT 1 FROM CITY1 WHERE CITY.ID= CITY1.ID)'; --把表city的数据 复制到city1中 id没有的,100万数据量 执行一次20秒。
EXECUTE IMMEDIATE INSSQL;
OUTS:=SQL%rowcount;
COMMIT;
END;这个村粗过程如果被2个页面同时执行的话,看到city1表里有200万数据。是并发导致吗?怎么改写这个存储过程。
解决方案 »
- PLSQL连接ORACLE怪异问题~~!!求救啊
- pro*c sql文最大长度的问题
- 在linux下改完IP地址后,oracle启动不起来?
- 物化视图复制,当主站点与物化视图站点断开连接的情况下主站点不可操作的问题~
- 急:ORA-12638: 身份证明检索失败
- 红帽系统下,使用oracle数据库导出命令exp遇到的问题
- 晕死了,大家快帮我看看这个SQL怎么执行的这么慢!!!
- 求一个SQL语句,请高手近来帮忙看看!
- 数据库中index是什么东西?
- sql中一个表中,求实体之间关系,自关联导致效率低下问题?
- 求SQL语句.......................................................(标题要长)
- .NET里面怎么写出ORADC的refresh方法?
--你的city表是不是沒主鍵或索引,怎麼這麼慢,我設置id為主鍵,用100萬測試,執行sp一秒
CREATE OR REPLACE PROCEDURE AA_BB(OUTS OUT VARCHAR) IS
INSSQL VARCHAR2(4000);
BEGIN
lock table city1 in exclusive mode;
INSSQL:='insert into city1 select id,cs from city where not exists(SELECT 1 FROM CITY1 WHERE CITY.ID= CITY1.ID)'; --把表city的数据 复制到city1中 id没有的,100万数据量 执行一次20秒。
EXECUTE IMMEDIATE INSSQL;
OUTS:=SQL%rowcount;
COMMIT;
END;
/
我这个id只是举个例子的字段,它实际是 设备、日期等多个字段。
有没有其他别的方法比如 在insert前加一行 lock table CITY1 in share row exclusive mode;
但是这个锁一旦加上其他客户就不能操作这个的其他数据了,有没有控制一批记录的锁?