update a
set columna1 = (select columnc2
from b,c
where columnb2 = columna2
and columnc1 = columnb1
and rownum = 1 --本行用于处理超过一个结果);
另外,相关联的字段最好有索引,以提高效率
set columna1 = (select columnc2
from b,c
where columnb2 = columna2
and columnc1 = columnb1
and rownum = 1 --本行用于处理超过一个结果);
另外,相关联的字段最好有索引,以提高效率
解决方案 »
- windows下如何连接虚拟机里面的oracle?
- SQL语句问题,高手看看
- 请教大家一个问题,希望能够解决,想出个好的办法来!
- 变量绑定执行动态语句错误 ORA-01001
- oracle8 数据库备份 -那为大侠哥知道。谢了
- 关于trigger 的一个问题
- 请问,如果在使用count(*)的时候,将相同的记录计算为一个
- 大侠请进,导入数据库时出错。IMP-00058
- 请问:系统重装后,怎么恢复以前的ORACLE数据库呢?ORACLE数据库文件都E盘上
- char 和 varchar2 有什么区别?
- oracle的数据库驱动程序是否可以单独安装,怎么用别的打包程序(如:installshield)将它打包进去?
- exception的问题
语句我是这样写的:
DECLARE
cursor cur1 IS SELECT columna1 FROM a;
a1 a.columna1%type;
c1 c.columnc1%type;
BEGIN
OPEN cur1;
LOOP
FETCH cur1 INTO a1;
EXIT WHEN cur1%notfound;
BEGIN
SELECT columnc2 into c2
FROM c
WHERE columncc = (select b.columnb1
from b,a
where a.columna1 = a1 and a.columna2 = b.columnb2);
UPDATE a SET columna1 = c2
WHERE columna1 = a1;
END;
END LOOP;
CLOSE cur1;
END;当数据少时,程序很快执行完毕
而当对40万条数据进行处理的时候,则运行时间很长,程序“死掉”
请问各位,象这种情况,是不是不能用游标?
如果不可以,那该怎么做呢?
1.自己控制事务,每1000条COMMIT一次,当然去掉数据库事务也可;
2.注意索引;
select a.columna1, c.columnc2
from
a
right outer join
b
on a.columna2 = b.columnb2
left outer join
c
on b.columnb1 = c.columnc1