使用行号更新Oracle表列

时间:2015-11-15 05:01:44

标签: sql oracle sql-update oracle10g

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

UPDATE employee SET empid = row_number();

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

4 个答案:

答案 0 :(得分:7)

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

但是,对于此用例,您可以使用rownum伪列:

UPDATE employee SET empid = ROWNUM;

<强> SQLFiddle

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

  

UPDATE员工SET empid = row_number();

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

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

当您回复我的评论时,订单对您无关紧要,您只需使用 ROWNUM 即可。

UPDATE employee SET empid = ROWNUM;

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

通常使用 SEQUENCE 对象生成员工ID。有两种方法可以实现自动增量功能:

答案 3 :(得分:0)

你也可以这样做

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

这会在您编写表本身时创建序列号。 (注意如果你想让它充当pk,这不会被设置为PK)