迭代非顺序列

时间:2016-11-21 15:52:45

标签: plsql

有人可以帮助我......

我必须为每个" Costumer"创建一个非顺序ID的迭代器来更新"版本"列。

我需要一个光标或其他东西?

我可以得到一些帮助吗?

示例:

ID   COSTUMER         VERSION
12    ANNA                 1
24    ANNA                 4
25    ANNA                 5
60    ANNA                11

我想将版本更正为顺序

2 个答案:

答案 0 :(得分:0)

您可以使用以下代码:

@myarray = []

begin for r in ( select id, row_number() over (partition by name order by version) as rn from costumer ) loop update costumer set version = r.rn where id = r.id; end loop; end; / 就在那里,因为我假设您希望序列从1开始为ANNA'然后再从1开始为客户' JANE'如果没有,你可以删除该部分。

答案 1 :(得分:0)

以下是通过单个MERGE语句执行此操作的方法:

MERGE INTO costumer tgt
  USING (SELECT ID,
                costumer,
                VERSION,
                ROWID row_id,
                row_number() OVER (PARTITION BY costumer ORDER BY VERSION) new_version
         FROM   costumer) src
  ON (tgt.rowid = src.rowid)
WHEN MATCHED THEN
UPDATE SET tgt.version = src.new_version;
相关问题