Колона за автоматично увеличение е доста често срещано изискване в кодирането. Ето някои от начините да получите това в Oracle
Автоматично увеличение в оракул
Тази функция (колона за автоматично увеличение на Oracle – последователност като стойност по подразбиране) досега не присъства в базата данни на Oracle. Но с 12c оракулът е в състояние да осигури това.
Да предположим, че искаме да зададем таблица на оракул, където последователността трябва да се увеличава автоматично при вмъкване. Има много начини да го постигнете
Опция 1
Преди Oracle 12c трябва да използваме преди вмъкване тригери, за да го постигнем
create table test_lab ( id number primary key name varchar (10) ); create sequence test_lab_seq start with 1 increment by 1 nocycle; create or replace trigger test_lab_bef_auto before insert on test_lab for each row begin select test_lab_seq.nextval into :new.id from dual; end; /
или
create or replace trigger test_lab_bef_auto
before insert on test_lab
for each row
begin
:new.id := test_lab_seq.nextval;
end;
/
Можем да посочим кога идентификаторът е нулев в тригери, за да избегнем грешките, когато изразът за вмъкване има стойност на колоната id
insert into test_lab values ('john'); insert into test_lab values ('scott'); insert into test_lab values ('bill'); insert into test_lab values ('tom'); insert into test_lab values ('Duke'); commit; select * from test_lab;
Вариант 2:
С Oracle 12c можем директно да присвоим последователност nextval като стойност по подразбиране за колона, така че вече не е необходимо да създавате тригер за попълване на колоната със следващата стойност на последователността, просто трябва да я декларирате с дефиницията на таблицата.
create sequence test_lab_seq start with 1 increment by 1 nocycle; create table test_lab ( id number default test_lab_seq.nextval primary key ); insert into test_lab values ('Cat1'); insert into test_lab values ('Cat2'); insert into test_lab values ('Cat3'); insert into test_lab values ('Cat4'); insert into test_lab values ('Cat5'); commit; select * from test_lab;
Вариант 3
С 12c можем да използваме функцията за идентифициране
create table test_lab ( id number(10) GENERATED AS IDENTITY, name varchar(15) ); Table created. Desc TEST_LAB Name Null? Type ---- ---- ---- ID NOT NULL NUMBER(10) NAME VARCHAR2(15)
- Можем да видим, че ограничението NOT NULL автоматично се налага върху колоната за идентичност
- Oracle вътрешно използва последователността за попълване на стойностите на колоните с автоматично увеличение.
insert into test_lab values ('London'); insert into test_lab values ('New york'); insert into test_lab values ('Tokyo'); insert into test_lab values ('Delhi'); insert into test_lab values ('Bangalore'); commit; select * from test_lab;
Свързани статии за Oracle Sql
как да създадете таблица в oracle
Как да създадете изгледи на Oracle
Top-N Queries and Pagination
как да напишете sql заявки
Oracle sql декодиране