这个脚本怎么写~~~
oracle上
有两个表
如语句:
update tableA set tableA.line=tableB.line where tableA.id=tableB.id;
因为有许多行,不知道怎么写这个小的过程~~
就是tableA上有几十行需要从tableB上update的
谢谢了~~
[解决办法]
update tableA set tableA.line=(selecy tableB.line from tableB where tableA.id=tableB.id) where exists (select * from tableb where tablea.id=tableb.id);
若ID是主键可以这样
UPDATE (SELECT A.COL COLA,B.COL COLB FROM tableA A,tableB B WHERE A.ID=B.ID) SET COLA=COLB
[解决办法]
如果tableB的ID是PK,可以
update (select a.line,b.line from a,b where a.id=b.id) set a.line=b.line;
否则就
update a set a.line=(select b.line from b where b.id=a.id and rownum=1) where exists(select 1 from b where a.id=b.id);
[解决办法]
b.id不是主键不能使用update (select a.line,b.line from a,b where a.id=b.id) set a.line=b.line.这个不知道后台到底是怎么实现的,但是这种写法比update a set a.line=(select b.line from b where b.id=a.id and rownum=1) where exists(select 1 from b where a.id=b.id);慢,根据执行计划来看,前者是
UPDATE STATEMENT, GOAL = ALL_ROWSCost=4Cardinality=3Bytes=186
UPDATEObject owner=WPUSHObject name=A
NESTED LOOPSCost=4Cardinality=3Bytes=186
TABLE ACCESS FULLObject owner=WPUSHObject name=ACost=3Cardinality=3Bytes=93
TABLE ACCESS BY INDEX ROWIDObject owner=WPUSHObject name=BCost=1Cardinality=1Bytes=31
INDEX UNIQUE SCANObject owner=WPUSHObject name=SYS_C0017314Cost=0Cardinality=1
后者是:
UPDATE STATEMENT, GOAL = ALL_ROWSCost=3Cardinality=3Bytes=93
UPDATEObject owner=WPUSHObject name=A
TABLE ACCESS FULLObject owner=WPUSHObject name=ACost=3Cardinality=3Bytes=93
TABLE ACCESS BY INDEX ROWIDObject owner=WPUSHObject name=BCost=1Cardinality=1Bytes=31
INDEX UNIQUE SCANObject owner=WPUSHObject name=SYS_C0017314Cost=0Cardinality=1
这个脚本如何写~
这个脚本怎么写~~~oracle上有两个表如语句:updatetableAsettableA.linetableB.linewheretableA.idtableB
