我知道它似乎与某些问题类似,但我希望我的不同。
我使用的是Oracle数据库
我希望使用
对列进行auto_increment COMPUTED column and LAST_VALUE(column) + 1
所以我有以下要求:
ALTER TABLE schema.table (
ADD SK NUMBER ALWAYS AS (LAST_VALUE(SK)+1)
);
它只会那样做吗?
或者我是否需要添加FOR EACH ROW
句子以符合我对auto_increment的需求?
编辑根据G00dy的评论:
序列:
create sequence SK_SEQUENCES
increment by 1
start with 1
nomaxvalue
minvalue 1
nocycle
order
keep;
表格:
create table schema.test(
isCurrent CHAR(10),
SK NUMBER
);
如果我理解@ g00dy的评论,
我需要将序列添加为我的列SK
的值,
所以我有这个:
insert into schema.test(SK)
values (SK_SEQUENCES.nextval)
然后确定,它有效
但是当我在isCurrent
列中添加值时,
SK
列
我想,要使用auto_increment我需要创建一个触发器。
也许我必须使用触发器/序列来解决我的问题,但我不想......
答案 0 :(得分:2)
不,它不会工作。
首先,语法为<link rel="stylesheet" href="YourStylesheet.css">
,而不仅仅是generated always
,并且always
子句周围没有括号。但是,这仍然没有成功:
add
失败了:
alter table demo
add sk integer generated always as (last_value(sk)+1);
因为ORA-30484: missing window specification for this function
是一个分析函数,需要成为查询的一部分并具有类似last_value
的窗口规范。您不能将分析函数用作列默认值。
从Oracle 12.1开始,您可以将标识列定义为:
over (partition by xxx order by yyy)
在早期的Oracle版本中,您需要在插入时指定sequence.nextval,否则创建触发器
alter table demo
add sk integer generated always as identity;