簡體   English   中英

使用行號更新Oracle表列

[英]Update Oracle table column with row number

我想用行號更新表列。 empid列中的每一行都應使用相關的行號進行更新。 我試過以下查詢。

UPDATE employee SET empid = row_number();

但這不起作用。 任何的想法?

首先,這不是row_number()函數的正確語法,因為您缺少over子句(導致ORA-30484錯誤)。 即使它是,這也行不通,因為你不能直接在set子句中使用窗口函數(導致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員工SET empid = row_number();

首先,它在語法上是不正確的。

其次,您不能使用ROW_NUMBER()沒有analytic_clause解析函數。

當您回復我的評論時,訂單對您無關緊要,您可以簡單地使用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

這會在您編寫表本身時創建序列號。 (注意如果你想讓它充當pk,這不會被設置為PK)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM