Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Coluna de Incremento Automático – Sequência como Valor Padrão no Oracle


Auto Increment Column é um requisito bastante comum na codificação. Aqui estão algumas das maneiras de obter isso no Oracle

Incremento automático no oráculo


Este recurso (Coluna de Incremento Automático do Oracle – Sequência como Valor Padrão) não está presente no banco de dados Oracle até agora. Mas com 12c, a Oracle é capaz de fornecer isso.

Suponha que queremos definir uma tabela oracle onde a sequência deve ser incrementada automaticamente em insert . Há muitas maneiras de alcançá-lo

Opção 1
Antes do Oracle 12c, precisamos usar antes de inserir gatilhos para alcançá-lo
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;
/

ou
create or replace trigger test_lab_bef_auto
before insert on test_lab
for each row
begin
:new.id := test_lab_seq.nextval;
end;
/

Podemos especificar quando o id é nulo nos gatilhos para evitar erros quando a instrução insert está tendo um valor da coluna 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;

Opção 2:
Com o Oracle 12c, podemos atribuir diretamente a sequência nextval como um valor padrão para uma coluna, então você não precisa mais criar um gatilho para preencher a coluna com o próximo valor da sequência, basta declará-lo com a definição da tabela.
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;

Opção 3
Com 12c, podemos usar o recurso de identificação
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)
  • Podemos ver que a restrição NOT NULL é automaticamente imposta à coluna Identity
  • O Oracle usa internamente a sequência para preencher os valores da coluna de incremento automático.
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;

Artigos Oracle Sql relacionados

como criar tabela no oracle
Como criar visualizações do Oracle
Consultas e Paginação Top-N
como escrever consultas sql
Processamento de decodificação do Oracle sql