Oracle SQL — 创建序列并在新列上添加序列值

Oracle SQL - Create Sequence and add sequence values on new column

提问人:Stamatis Tiniakos 提问时间:9/10/2022 更新时间:9/10/2022 访问量:535

问:

我有下表,称为table_1

enter image description here

我创建一个新column_3

enter image description here

然后我创建一个序列

CREATE SEQUENCE "sequence_1" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE NOPARTITION

我更改了table_1,因此column_3上新值的默认值是序列的值。

ALTER TABLE table_1 MODIFY column_3 DEFAULT sequence_1.NEXTVAL

如何将column_3上的现有 null 值替换为此序列中的值?最终结果应为:

enter image description here

SQL Oracle PLSQL 序列

评论

1赞 Isolated 9/10/2022
Col3 和 Col1 有关系吗?你的第一行是 1,红色,1 有关系吗?可以是1,红色,982吗?
0赞 Stamatis Tiniakos 9/10/2022
@Isolated假设没有关系。它可以是 1、红色、982。
0赞 Isolated 9/10/2022
这并不能回答您的问题,但如果目标是在 col3 中获取一个随机数,那么一种方法是这样的。在这里,我只是创建一个新表,但你明白了:create table t2 as (select id, color, row_number() over (order by DBMS_RANDOM.RANDOM) as rn from my_table)
0赞 Stamatis Tiniakos 9/10/2022
@Isolated column_3必须由序列生成的值填充,例如,在每行上使用 sequence_1.NEXTVAL 进行column_3。

答:

0赞 Stamatis Tiniakos 9/10/2022 #1

我想出的解决方案如下 - 很高兴接受更好的答案:

ALTER TABLE table_1 ADD column_3 NUMBER(38,0) DEFAULT sequence_1.NEXTVAL NOT NULL

评论

1赞 William Robertson 9/10/2022
default on null在我看来更好。添加标识列会更好,但将标识列添加到现有表需要几个步骤。
1赞 Barbaros Özhan 9/10/2022 #2

如果您的数据库版本是 ,则添加标识列将处理所需的内容,例如12c+

ALTER TABLE table_1 ADD new_id INT GENERATED ALWAYS AS IDENTITY

哪里

  • 使用 和 是强制性的GENERATEDAS IDENTITY
  • 有以下三个选项。 如果按本例中使用该选项,则始终会生成标识列的值。尝试将值插入到标识列中将导致错误。[ ALWAYS | BY DEFAULT [ ON NULL ] ]ALWAYS
  • 无需使用和选项 当前案例。由于这些已经是 1 作为默认值START WITHINCREMENT BY

Demo