用行号更新 Oracle table 列

Update Oracle table column with row number

我想用行号更新 table 列。 empid 列中的每一行都应更新为相关的行号。 我尝试了以下查询。

UPDATE employee SET empid = row_number();

但这不起作用。有什么想法吗?

首先,这不是 row_number() 函数的正确语法,因为您缺少 over 子句(导致 ORA-30484 错误)。即使是,这也行不通,因为您不能在 set 子句中直接使用 window 函数(导致 ORA-30483 错误)。

然而,对于这个用例,您可以只使用 rownum 伪列:

UPDATE employee SET empid = ROWNUM;

SQLFiddle

您可以执行如下操作。如果需要,您可以更改 ORDER BY 对行的排序。

UPDATE emp
SET empid = emp.RowNum
FROM (SELECT empid, ROW_NUMBER() OVER (ORDER BY empid) AS rowNum FROM employee) emp

UPDATE employee SET empid = row_number();

首先,它在语法上是不正确的。

其次,如果没有 analytic_clause,则无法使用 ROW_NUMBER() 分析函数。

当你回复我的评论说顺序对你来说无关紧要时,你可以简单地使用 ROWNUM.

UPDATE employee SET empid = ROWNUM;

它将通过随机选择行来分配伪列值。由于您分配的是 EMPID,我建议您考虑订购。

通常员工 ID 是使用 SEQUENCE 对象生成的。自增功能有两种实现方式:

你也可以这样做

create table your_table_name as
select row_number() over( order by 1) as serial_no, a.* from your_query a

这会在您编写 table 本身时创建序列号。 (请注意,如果您希望它充当 pk,则不要将其设置为 PK)