提问人:Stamatis Tiniakos 提问时间:9/10/2022 更新时间:9/10/2022 访问量:535
Oracle SQL — 创建序列并在新列上添加序列值
Oracle SQL - Create Sequence and add sequence values on new column
问:
我有下表,称为table_1
我创建一个新column_3
然后我创建一个序列
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 值替换为此序列中的值?最终结果应为:
答:
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
哪里
- 使用 和 是强制性的
GENERATED
AS IDENTITY
- 有以下三个选项。
如果按本例中使用该选项,则始终会生成标识列的值。尝试将值插入到标识列中将导致错误。
[ ALWAYS | BY DEFAULT [ ON NULL ] ]
ALWAYS
- 无需使用和选项
当前案例。由于这些已经是
1
作为默认值START WITH
INCREMENT BY
评论
create table t2 as (select id, color, row_number() over (order by DBMS_RANDOM.RANDOM) as rn from my_table)