我有一个要添加sort_order列的数据库表。我想遍历表中的每一行并设置sort_order,同时将其值增加1。
伪:
UPDATE captions set sort_order++ where category_id = ?
我可以通过什么方式实现这一目标?
答案 0 :(得分:1)
您可以使用序列:
create sequence my_seq1;
UPDATE captions set sort_order = nextval('my_seq1') where category_id = ?
答案 1 :(得分:0)
DECLARE
v_sort_order NUMBER := 1;
BEGIN
FOR i IN
( SELECT category_id FROM captions ORDER BY <column names>
);
LOOP
UPDATE captions
SET sort_order = v_sort_order
WHERE category_id = i.category_id;
v_sort_order := v_sort_order +1;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20501,'error'||SQLCODE||sqlerrm);
END;
这个PL-SQL块应该可以做。
在i中输入(从字幕中选择category_id ORDER BY); 这将选择字幕表的所有列。
在order by子句中,用您要排序的实际列名替换。 更新语句将更新所有选定的行。
答案 2 :(得分:0)
或者,您可以使用ROW_NUMBER
窗口函数:
WITH caption_rn AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY caption_id) AS rn
FROM captions
)
UPDATE captions
SET sort_order = caption_rn.rn
FROM caption_rn
WHERE captions.caption_id = caption_rn.caption_id