【问题标题】:oracle - assign a sequence to a partition by grouporacle - 按组将序列分配给分区
【发布时间】:2015-03-30 23:46:56
【问题描述】:
select row_number() over(partition by col1,col2), col1, col2, col3 
from table1 
where xxxx...

在使用上面的查询时,如何为每个组分配一个 sequence.nextval ?

【问题讨论】:

    标签: oracle partition


    【解决方案1】:

    我想到了一种仅使用 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 2017-10-10
      相关资源
      最近更新 更多