具有最小值的Oracle Update行

时间:2013-04-06 07:44:38

标签: oracle

我正在尝试向用户提供一些独特的随机代码,但不会跳过范围内的任何数字。我的桌子就像这样

RandomCode | IsUsed | RNum
--------------------------
002        | Y      | 1
004        | Y      | 2
003        | NULL   | 3
005        | Y      | 4
001        | NULL   | 5

所以下一个要使用的随机码应该是003然后是001.问题是用户可以返回代码,我应该将该号码给予someonelse。在那种情况下,我将IsUsed设置为NULL。

我尝试选择IsUsed列的最小Rnum为NULL。然后更新表。但是遇到了Race条件,用户得到了重复的RandomCode。

的任何帮助

更新表 SET IsUsed = N'Y' IsIsed = NULL和RNum = MIN(RNUM) RETURNING

1 个答案:

答案 0 :(得分:2)

你在代码中犯了两个小错误:

  1. 您完成了IsUsed = NULL

    此条件始终返回false。没有什么等于NULL。请改用IsUsed IS NULL

  2. 您使用了RNum = MIN(RNum)。请改用子查询。

  3. 以下是您使用这些简单修改的​​查询。

    UPDATE TABLE
    SET IsUsed = N'Y'
    WHERE IsUsed IS NULL
    and RNum = (SELECT MIN(RNum) FROM table WHERE IsUsed IS NULL)