oracle查询并更新方法,查询在合并/更新Oracle查询

递增列值我有一个Oracle表 - AccountDetails - REQUEST_ID必须是唯一的查询在合并/更新Oracle查询

Account_No Request_Id Issue_date Amount

1 567 20150607 $156

2 789 20170406 $765

3 20170216 $897

4 987 20160525 $345

5 564 20170112 $556

6 20171118 $987

需要在那里请求ID为null下面的逻辑来更新REQUEST_ID。我需要获取最大请求ID并需要更新请求ID(最大请求ID + 1)WHERE request_id为空,request_id必须在表中唯一。所以结果应该是。

Account No Request_Id Issue_date Amount

1 567 20150607 $156

2 789 20170406 $765

3 988 20170216 $897

4 987 20160525 $345

5 564 20170112 $556

6 989 20171118 $987

试着用下面的查询,但该值没有得到增量。相同的值在request_id(988)中得到更新。

MERGE INTO account_details tgt

USING (SELECT account_no,

CASE WHEN request_id IS NULL THEN 1 + max(request_id)

ELSE request_id

END request_id,

issue_date,

amount,

ROWID r_id

FROM accountdetails) src

ON (tgt.rowid = src.r_id)

WHEN MATCHED THEN

UPDATE SET tgt.request_id = src.request_id;

2017-09-07

sam

+0

你不在乎哪个帐户得到988,哪个得到999,对吧? (你不应该在意 - 请求ID应该是一个非空的,唯一的数字,与数据中的其他任何东西都没有相关关系。) –

+0

是的我不在乎哪个帐户得到988或999 ..只是我需要更新通过获取最大请求ID并增加1来获得唯一的ID。 –

+0

该表中的请求ID如何填充那些已经拥有它们的行?如果是“max id + 1”方法,我强烈建议您改用序列代替 - 对于并发插入/更新会更好! –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值