如何在select语句中的oracle中递增唯一约束列的值。
例如,在表'billing_table'中 - 列blng_sk是唯一的键(自动启动(。
因此,在将新记录插入billing_table中时,对于列blng_sk,我们需要给出值(这是从当前最大值中增量1的增量。例如,如果blng_sk最大值为12321。
新记录应为12322。如何在Oracle中实现这一目标?
Oracle具有SEQUENCE
对象,该对象提供您需要的功能。
您使用CREATE SEQUENCE
SQL语句创建一个。
Oracle文档提供了所有必需的信息,并且可以通过Oracle的网站获得文档。
假设您在Oracle 12.1或更高版本上,将其定义为身份列,并且在插入时不会传递任何值:
create table testtable
( test_id number generated always as identity
constraint testtable_pk primary key
, othercol varchar2(10) );
insert into testtable (othercol) values ('Demo');
select * from testtable;
TEST_ID OTHERCOL
---------- ----------
1 Demo
insert into testtable (othercol) values ('Demo #2');
select * from testtable;
TEST_ID OTHERCOL
---------- ----------
1 Demo
2 Demo #2
尝试创建序列和触发器。当您手动提供值时,就是这种情况。
创建序列dept_seq以12322;
开始触发定义:
CREATE OR REPLACE TRIGGER dept_bir
BEFORE INSERT ON BILLING_TABLE
FOR EACH ROW
BEGIN
SELECT dept_seq.NEXTVAL
INTO :new.id
FROM dual;
END;
/