将行数传递给Oracle中的列[重复]
Posted
技术标签:
【中文标题】将行数传递给Oracle中的列[重复]【英文标题】:Pass row count to a column in Oracle [duplicate] 【发布时间】:2017-10-06 03:02:14 【问题描述】:我有一张没有 ID 的表。所以我想在总行数中添加一个 1 的新列。我在表中打开了一个新列,但我不知道如何用行数填充它。我在互联网上搜索,但找不到解决我问题的解决方案。你能告诉我怎么做吗?提前致谢。
【问题讨论】:
你想按什么顺序生成这个id列?如果它只需要是唯一的(并且不一定是无间隙的),您可以使用序列。您也可以在查询时使用row_number
,而不是存储值
【参考方案1】:
您可以这样做(适用于 12c 或更高版本):
alter table your_table add id number generated always as identity;
不过,这也会为列生成新值,以供将来插入。
还有关于total row number
,这应该几乎总是生成从1到“总行号”的值,但无论如何(不知道确切,什么时候可能会不正确),检查一下,在alter
之后你可以做:select count(*), max(id) from your_table
。值应该匹配在一起。
【讨论】:
此解决方案仅适用于 12c 或更高版本。 @APC - 谢谢,你是对的,更新了 如果 OP 使用 12c 这将是最好的解决方案【参考方案2】:最简单的解决方案是
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);
【讨论】:
以上是关于将行数传递给Oracle中的列[重复]的主要内容,如果未能解决你的问题,请参考以下文章
将行转置为 BigQuery 中的列(数据透视实现)[重复]