oracle 批量update 找出不存在的记录

lygfqy 2010-11-24 05:31:54
现在有批量的数据对数据库进行更新
可能有部分数据在表中不存在
但是更新不会返回错误,可以得到更新的条数,但是如何挑选出没有更新上的数据呢
...全文
288 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zengjc 2011-02-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 bearfishshow 的回复:]
如果是根据某一个字段来确定是否要更新
你可以先查看两个结果集里面有哪些数据是不会更新的,
所谓不会更新的就是这个表的数据在另一个表中不存在的数据.
如:
select * from table_a a where not exists (select 1 from table_b where a.id = b.id );
这样不就找出不会更新的记录了嘛?
[/Quote]
这位兄弟的说法比较合适,先进行更新,然后再通过上面的SQL查询没更新的记录。
灰哥 2011-01-12
  • 打赏
  • 举报
回复
如果是根据某一个字段来确定是否要更新
你可以先查看两个结果集里面有哪些数据是不会更新的,
所谓不会更新的就是这个表的数据在另一个表中不存在的数据.
如:
select * from table_a a where not exists (select 1 from table_b where a.id = b.id );
这样不就找出不会更新的记录了嘛?
mer1234567 2011-01-10
  • 打赏
  • 举报
回复
看看merge into
lxyzxq2008 2011-01-05
  • 打赏
  • 举报
回复

--这样子行不行呢?
--更新每条数据时,用一个数组来记录更新的状态(1:成功/0:失败)
--更新完成后,把数组返回,循环数组,值为0的就是失败的数据,根据下标,很容易找到那条数据
cuishengmin 2011-01-05
  • 打赏
  • 举报
回复
只能用游标,在循环里面更新,再判断SQL%ROWCOUNT是否为零
freeman0526 2010-12-23
  • 打赏
  • 举报
回复
使用sql%rowCount 可以知道更新的记录数 0 就是没有,然后把这条记录记录下来不就的了.

update table set a = b where id = 'xxxx';
if sql%rowCount = 0 then
insert log (a) values ('xxx');
--其他处理.
end if;
hemengmengbjpg 2010-11-25
  • 打赏
  • 举报
回复
Mergo Into table a1
using(resultSet) a2
on(条件)
when matched then--数据存在
....
when not matched then --数据不存在
insert into table2 ...
huangyunzeng2008 2010-11-24
  • 打赏
  • 举报
回复
update 有返回选项的,该选项的返回值代表此次影响的行数!
心中的彩虹 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 lygfqy 的回复:]
现在有批量的数据对数据库进行更新
可能有部分数据在表中不存在
但是更新不会返回错误,可以得到更新的条数,但是如何挑选出没有更新上的数据呢
[/Quote]
把更新的值返回数组 付给临时表
在两个表做差集就知道否
YY_MM_DD 2010-11-24
  • 打赏
  • 举报
回复
根据返回值判断有没有更新
YY_MM_DD 2010-11-24
  • 打赏
  • 举报
回复
但是有返回值啊。。

SQL>
SQL> declare
2 rtnvalue number;
3 begin
4 update temp set id = 23344 return id into rtnvalue;
5 dbms_output.put_line(rtnvalue);
6 end;
7 /

23344

PL/SQL procedure successfully completed

SQL>

3,494

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧