我想用行号更新表列。
empid
列中的每一行都应使用相关的行号进行更新。
我尝试了以下查询。
UPDATE employee SET empid = row_number();
但这不起作用。有什么想法吗?
答案 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)