【发布时间】:2015-03-30 23:46:56
【问题描述】:
select row_number() over(partition by col1,col2), col1, col2, col3
from table1
where xxxx...
在使用上面的查询时,如何为每个组分配一个 sequence.nextval ?
【问题讨论】:
select row_number() over(partition by col1,col2), col1, col2, col3
from table1
where xxxx...
在使用上面的查询时,如何为每个组分配一个 sequence.nextval ?
【问题讨论】:
我想到了一种仅使用 SQL 的方法。关键是为每个分区条件只返回一行,并为每个值获取一个序列值。
MERGE INTO table1
USING (SELECT col1, col2, your_sequence.NEXTVAL AS seq
FROM (SELECT DISTINCT col1, col2 FROM table1)) s
ON (table1.col1 = s.col1 AND table1.col2 = s.col2)
WHEN MATCHED THEN
UPDATE SET seq_column = s.seq
WHERE some_column = some_condition
使用 PL/SQL,您可以遍历查询结果并更新每个分区:
DECLARE
CURSOR cur_partitions IS
SELECT DISTINCT col1, col2
FROM table1
WHERE some_column = some_condition;
v_seq NUMBER;
BEGIN
FOR r_partition IN cur_partition LOOP
v_seq := your_sequence.NEXTVAL;
UPDATE table1
SET seq_column = v_seq
WHERE col1 = r_partition.col1
AND col2 = r_partition.col2
AND some_column = some_condition;
END LOOP;
END;
【讨论】: