如何用序列号更新oracle列表列

How to update oracle list column with sequence number

您好,我有这样的 oracle 数据 table

seq_no name place
1 Rian Us
1 Moli Us
1 Molina Us

我想自动更新 seq_no 成为那样

seq_no name place
1 Rian Us
2 Moli Us
3 Molina Us

“自动”是什么意思?

您可以创建 table,以便 SEQ_NO 数据库触发器 自动填充(不能使用标识列,因为您在 11g 上)。

或者,如果您想更新 table,一个简单的选择是

update your_table set seq_no = rownum;

如果你有 table:

CREATE TABLE table_name (seq_no, name, place) AS
SELECT 1, 'Rian',   'Us' FROM DUAL UNION ALL
SELECT 1, 'Moli',   'Us' FROM DUAL UNION ALL
SELECT 1, 'Molina', 'Us' FROM DUAL;

和一个序列:

CREATE SEQUENCE your_sequence;

然后您可以使用以下方法将现有行更新为序列值:

UPDATE table_name
SET seq_no = your_sequence.NEXTVAL;

那么 table 将包含:

SEQ_NO NAME PLACE
1 Rian Us
2 Moli Us
3 Molina Us

然后当你想要INSERT更多行时,你可以使用:

INSERT INTO table_name (seq_no, name, place)
VALUES (your_sequence.NEXTVAL, 'New Name', 'New Place');

和行:

SEQ_NO NAME PLACE
4 New Name New Place

将添加下一个序列号。

或者,您可以编写触发器来获取下一个序列号,或者从 Oracle 12 开始,使用 IDENTITY 列。

db<>fiddle here