将行数传递到Oracle的一列中

16 浏览
0 Comments

将行数传递到Oracle的一列中

这个问题已经在下面有答案了:

如何在Oracle上创建自动增量ID?

我有一张表格没有ID。因此,我想添加一个新列,该列是总行数的1。我在表格中打开了一个新列,但我不知道如何用行数填充它。我在网上搜索了一下,但我找不到解决我的问题的解决方案。你能告诉我怎么做吗?先感谢您。

admin 更改状态以发布 2023年5月19日
0
0 Comments

最简单的解决方案是

update your_table
set id = rownum;

然而,这对未来插入到该表中的数据无法起到帮助。如果这是即将发生的事情,请建立一个序列。

SQL> select max(id) from your_table;
   MAX(ID)
----------
SQL> create sequence your_table_seq;
Sequence created.
SQL> update your_table
  2  set id = your_table_seq.nextval;
30 rows updated.
SQL> select max(id) from your_table;
   MAX(ID)
----------
        30
SQL> select id from your_table;
        ID
----------
         1
         2
         3
....
        28
        29
        30
30 rows selected.
SQL> 


顺便说一句,现在您已经添加了一个ID列并填充了它,请确保将其强制为主键:

alter table your_table add constraint your_table_pk primary key (id);

0
0 Comments

您可以这样做(适用于12c或更高版本):

alter table your_table add id number generated always as identity;

不过,这也会为列生成新值,供将来插入使用。

关于"总行数",这几乎总是会生成从1到"总行数"的值,但是无论如何(不知道何时可能会不正确),为了检查这一点,在执行alter之后,您可以执行:select count(*), max(id) from your_table。这些值应该是相互匹配的。

0