在Oracle中生成唯一编号

时间:2014-08-20 18:42:19

标签: sql oracle oracle11g

我有一个包含以下列的表

 APP_ID(VarChar),USER_ID(VarChar), ROLE_ID(Number),....
   app1                user1          3
   app1                user2          3
   app2                user2          4
   app2                user3          3
   app3                user1          7

正如您所看到的,没有ID字段,我无法添加它。

如果我使用以下查询,每次使用以下查询时,它都会给我唯一且相同的数字

SELECT owa_opt_lock.checksum(a.APP_ID || a.USER_ID || a.ROLE_ID) as ID 

我想知道使用它是安全的。

3 个答案:

答案 0 :(得分:3)

没有。你可能会发生碰撞。例如,这两行具有相同的id(app1user212):

app1 user2  12
app1 user21  2

使用分隔符可以很容易地解决这个问题。因此,对于大多数表格,以下情况都可以:

(a.APP_ID || '|' ||  a.USER_ID || '|' || a.ROLE_ID) as ID 

答案 1 :(得分:1)

您可以使用rownum吗?

UPDATE table
SET table_key = rownum;

答案 2 :(得分:0)

如果两行具有相同的值(可能),则可能发生

碰撞。

为什么不尝试使用row_number()分析函数。

  try adding: row_number() over(order by NULL).

它生成一个唯一的no系列(实际上是行号)