递增列值我有一个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”方法,我强烈建议您改用序列代替 - 对于并发插入/更新会更好! –