我想用一個正在運行的整數數字填充一個表列,所以我正在考慮使用ROWNUM。但是,我需要根據其他列的順序來填充它,例如ORDER BY column1, column2
。也就是說,不幸的是,不可能的,因爲甲骨文不接受以下聲明:我該怎麼辦呢使用Oracle:使用ROWNUM和ORDER BY子句更新一個表列
WITH tmp AS (SELECT * FROM table_a ORDER BY column1, column2)
UPDATE tmp SET sequence_column = rownum;
所以:
UPDATE table_a SET sequence_column = rownum ORDER BY column1, column2;
也不以下語句(以WITH子句中使用的嘗試)一個SQL語句,而不使用PL/SQL中的遊標迭代方法?
一旦當語句完成時,另一個DML操作發生,'sequence_col umn'會出錯/過時。爲什麼不把sequence_column(和編號)放在視圖中 - 這總是正確的。 – 2011-05-23 07:24:39
@Damien_The_Unbeliever我不知道我是否理解你,但是不需要擔心未來將記錄插入表中,因爲該列是唯一索引的,並且插入的腳本將保證將下一個運行號放入列中。只是在記錄被刪除時,列不再是順序的,需要重新排序。 – Lukman 2011-05-23 07:32:37
@Lukman,我同意Damien。最好是在運行 – 2011-05-23 07:34:33