ORACLE两表联合更新是经常会遇到的情况,我们经常会使用的方法是这样的:
update table_a
set …
where … and exists(select 1 from table_b where table_a.col = table_b.col and …)
这可以说是oracle下两表联合更新的标准用法:通过exist实现。
这种方法下,如果我只需要更新两个表中一个表的字段,那是非常恰当,但如果我需要将两个表的字段都更新一下,如果用上面的方法,我将需要写两个sql,是不是很麻烦,特别对于初学者来说,直接将需要更新的数据通过for update语句查询出来,直接修改,将非常方便。但使用for update来查询更新数据,试过这种方法的童鞋都知道,这样会报错:“ORA-01410: invalid ROWID”,本文告诉你怎么来解决这个问题。
实验第一步,准备两张数据表:
temp_test1
————————-
SID STEXT
1 123445
2 4345545
3 ref34rf34f
————————-
temp_test2
————————-
SID SNUMBER
1 888888
2 9999999
4 3333333
————————-
执行:SELECT * FROM temp_test1 a,temp_test2 b WHERE a.sid=b.sid FOR UPDATE,将查询结