目前,我们总是按特定顺序获取表的行:
SELECT ... FROM table_x WHERE ... ORDER BY ...
但是,我们希望用户可以通过拖动'n' drop来定制订单(是的,在这种情况下它确实有意义,where-clause通常确保它只有5-30行) . 为此,我们创建了 sequence_order
列,从现在开始,行将在选择时对其进行排序 .
问题是我们已经在 table_x
中拥有数百万行 . 当我们推出这个新功能时,我们希望在用户进行任何自定义之前,最初的订单与之前相同 . 即我们需要表演
UPDATE table_x SET sequence_number = ...
升级数据库时的某种形式 .
问题是我甚至没有看到如何使用原始order-by-clause来确保以正确的顺序更新行 . 这是可能的,还是我需要使用更高级别的脚本?
我们使用Oracle数据库,因此Oracle特定的构造是可以的 .
EDIT
作为一个简化示例:我需要一个语句,按照 name
列的字母顺序将1,2,3 ...写入 table_x
的 sequence_order
列 . 伪SQL中有类似的东西:
UPDATE table_x SET sequence_number = ... -- for all rows ORDER BY name
1 回答
如果我正确理解了您的问题,您希望在新列
sequence_number
中添加序列,该列应为order by
name
.我能想到的一种方法如下,但如果
name
重复,它会跳过一些数字 .创建一个序列
现在运行这个
plsql
块 .我强烈建议只有当你能够按顺序跳过一些数字时才使用它(但它们将是唯一的) .
还要确保auto_commit已关闭并从PLSQL块中删除提交,以确保您没有错误地更新它 .