Oracle
 sql >> база данни >  >> RDS >> Oracle

Колона за автоматично увеличение – последователност като стойност по подразбиране в Oracle

Колона за автоматично увеличение е доста често срещано изискване в кодирането. Ето някои от начините да получите това в 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 декодиране


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ефективен начин за тестване дали съществува ред в таблица

  2. Изпълняване на 2 заявки едновременно на Oracle SQL Developer?

  3. ИЗБЕРЕТЕ INTO с помощта на Oracle

  4. dbms_output.put_line

  5. SQL Server 2016 на Linux