您可以生成你想要的序列使用分析ROW_NUMBER函數。
例如,
比方說,你現有表樣子:
SQL> SELECT * FROM t;
YR NUM N
---------- ---------- -
2010 1 a
2010 2 b
2011 3 c
2011 1 a
2011 2 b
SQL>
I generate the desired output using **ROW_NUMBER** and name it `seq`:
SQL> SELECT t.*, row_number() over (partition by name order by yr, name) seq FROM t;
YR NUM N SEQ
---------- ---------- - ----------
2010 1 a 1
2011 1 a 2
2010 2 b 1
2011 2 b 2
2011 3 c 1
SQL>
現在,我創建一個使用上述查詢新表:
SQL> CREATE TABLE t_new AS SELECT t.*, row_number() OVER (PARTITION BY NAME ORDER BY yr, NAME) seq FROM t;
Table created.
SQL>
所以,我有新表與所需序列列:
SQL> SELECT * FROM t_new;
YR NUM N SEQ
---------- ---------- - ----------
2010 1 a 1
2011 1 a 2
2010 2 b 1
2011 2 b 2
2011 3 c 1
SQL>
你不需要舊錶,所以放棄它,並重新命名新表回舊錶:
SQL> DROP TABLE t PURGE;
Table dropped.
SQL> ALTER TABLE t_new RENAME TO t;
Table altered.
SQL> SELECT * FROM t;
YR NUM N SEQ
---------- ---------- - ----------
2010 1 a 1
2011 1 a 2
2010 2 b 1
2011 2 b 2
2011 3 c 1
SQL>
完成!
注意:
隨着CTAS方法,請確保您創建必要的索引和用舊錶相關的其他東西。
到目前爲止您嘗試過什麼?獲得你描述的結果的過程是什麼? – TZHX
我試着生成一個正常的序列,我想爲此創建觸發器,並在中間敲擊 – ramya
這不是一個正常的序列,你需要使用分析函數來計算列。看到我的答案。 –