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