Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Solay

Campo Autoincremento

Recommended Posts

Tem como criar um campo autonumeração no oracle como no sqlserver, que eu não preciso passar esse campo no insert, o próprio banco preenche ele.Me falaram que eu deveria criar uma sequência, mas como eu crio essa sequência e passo no insert esse campo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Solay,

 

Segue como criar e utilizar uma sequence.

 

SQL*Plus: Release 10.2.0.1.0 - Production on Ter Nov 21 10:58:50 2006Copyright (c) 1982, 2005, Oracle.  All rights reserved.SQL> select instance_name from v$instance;INSTANCE_NAME----------------xeSQL> create sequence TST_IMASTERS  2  start with 1  3  increment by 1  4  maxvalue 9999  5  nocycle;Seq³Ûncia criada.SQL> create table RODRIGO (a number(4), b varchar2(100));Tabela criada.SQL> select * from RODRIGO;nÒo hß linhas selecionadas SQL> insert into RODRIGO values (TST_IMASTERS.NEXTVAL,'TESTE 1');1 linha criada.SQL> insert into RODRIGO values (TST_IMASTERS.NEXTVAL,'TESTE 2');1 linha criada.SQL> commit;Commit concluÝdo.SQL> select * from RODRIGO;		 A B---------- ----------------------------------------		 1 TESTE 1		 2 TESTE 2

Caso queira saber como utilizar melhor a SEQUENCE, leia a coluna da iMasters. Objeto Sequence do Oracle

 

Abraços, B)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Geo Lima

 

A intenção foi boa mas este topico é de 2006

 

Se deseja realmente ajudar o faça em topicos recentes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim , mas você pode melhorar a solução dada.

Mantenha a sequence

create sequence TST_IMASTERS
start with 1
increment by 1
maxvalue 9999
nocycle;

Crie uma trigger de before insert

CREATE OR REPLACE TRIGGER TRG_IMASTERS
FRO EACH ROW
BEFORE INSERT IN RODRIGO

BEGIN
IF :NEW.A IS NULL THEN
:NEW.A := TST_IMASTERS.NEXTVAL;
END IF;
END;

Esta trigger permite a insersão sem usar a trigger.


insert into RODRIGO (b) values ('TESTE 1');

mas permite também que a chamada seja feita também pelo comano INSERT.

insert into RODRIGO values (TST_IMASTERS.NEXTVAL,'TESTE 2');

Isto dá flexibilidade na camada de front-end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ah agora axo q capitei a parte onde ele insere o valor do auto incremento na coluna do codigo TST_IMASTERS.NEXTVAL esse cara aki vai na coluna q você ker o auto incremento certo ?

 

eu tava testando ontem e nen me tokei aheahea

 

 

vlw Motta

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom uma outra duvida q apareceu aki agora eh tipo:

 

arrumei o auto incremento e tals

 

mas se eu deleto um valor do meio da tabela como eu faço pra um novo item receber o valor dakela linha ?? ou entao re-organizar os q tao pra frente do q foi deletado ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não recebe, uma sequence garante unicidade e não integridade na sequencia, algumas aplicações como Apólice de Seguro ou Nota Fiscais não permitem banguelas, a solução é criar uma tabela para guardar estas sequencias e não permitir a deleção física e sim algum tipo de cancelamento ou baixa que permita o registro da operação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.