在表中添加列后插入唯一值

时间:2015-02-17 04:29:56

标签: sql oracle oracle11g sql-update sequence

我们有一个包含两列的表,最近添加了另一列(名为sequence_no),有没有办法为表中的每一行插入1,2,3等唯一值?

例如

table name :   test
desc test
name varchar2
value varchar2
--> n_seq_no number

select * from test
Name    value   n_Seq_no
test1      100
test2      200
test3      300
test4      500

该表已经有了名称,而值作为表的列,我需要为现有数据添加n_Seq_no列的唯一值,

输出格式:

select * from test
Name    value   n_Seq_no
test1      100   1
test2      200   2
test3      300   3
test4      500   4 
对于表中的所有行,

等等。

2 个答案:

答案 0 :(得分:1)

您只需将新列设置为 ROWNUM

类似的东西,

SQL> CREATE TABLE t(
  2  A NUMBER,
  3  b NUMBER);

Table created.

SQL>
SQL> INSERT INTO t(A) VALUES(100);

1 row created.

SQL> INSERT INTO t(A) VALUES(200);

1 row created.

SQL> INSERT INTO t(A) VALUES(300);

1 row created.

SQL>
SQL> SELECT * FROM t;

         A          B
---------- ----------
       100
       200
       300

SQL>
SQL> UPDATE t SET b = ROWNUM;

3 rows updated.

SQL> SELECT * FROM T;

         A          B
---------- ----------
       100          1
       200          2
       300          3

SQL>

如果您使用 12c ,则可以使用 IDENTITY COLUMN

答案 1 :(得分:1)

假设您的桌子非常大,最好重新创建并重新填充:

rename test to old_test;

create table new_test
as
select t.*, rownum as n_seq_no 
  from old_test t
 order by value;

不要忘记迁移授权,索引,触发器等(如果有的话)。

更新:订购是可选的。仅当您想使用某种预定义顺序分配n_seq_no值时才需要它。