没有必要使用PL/SQL,这可以在SQL中使用ROW_NUMBER
解析函数来完成:
SELECT ORD_ID,
ROW_NUMBER() OVER (PARTITION BY ORD_ID
ORDER BY ITEM) -- or ORDER BY ROWNUM
AS ai_ln,
ITEM
FROM customer_order;
如果要更新,则表:
UPDATE customer_table c
SET ai_ln = (
SELECT rn
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY ord_id
ORDER BY item)
AS rn
FROM customer_table
) r
WHERE c.ROWID = r.ROWID
);
或者MERGE
:
MERGE INTO customer_table dst
USING (SELECT ROW_NUMBER() OVER (PARTITION BY ord_id
ORDER BY item) AS rn
FROM customer_table) src
ON (dst.ROWID = src.ROWID)
WHEN MATCHED THEN
UPDATE SET ai_ln = src.rn;
来源
2017-04-09 09:46:49
MT0
纠正我,如果我错了,但更新与自相关查询表,这是一个昂贵的,不是吗?我认为这将循环更有效率。 – Seyran
@Seyran如果你正在谈论一个PL/SQL循环,那么上下文切换将更加快速。 – MT0