Fórum Gerador no IB/FB #45102
24/06/2004
0
tô com uma duvida,
Tenho uma tabela :
Create table Clientes
Cod_cli integer not null,
nome_cli varchar(60),
.......
Primary Key(Cod_Cli)
);
Pra mim criar um ´Auto Incremento´ no campo Código dessa tabela vou ter q antes de criar a tabela criar o gerador (abaixo) ?
CREATE GENERATOR AUTO_NUMERACAO;
CREATE TRIGGER AUTO_NUMERA_CLIENTE FOR CLIENTES
BEFORE
INSERT POSITION 0 AS BEGIN
NEW.COD_CLI=GEN_ID(AUTO_NUMERACAO, 1);
END
Desde já agradeço a todos pela atenção !!
Christian_adriano
Curtir tópico
+ 0Posts
24/06/2004
Vinicius2k
Ao contrário... primeiro deve ser criada a tabela, depois o generator e por último a trigger... exatamente na sequencia que se encontra seu script.
Note apenas que serão um generator e uma trigger, com nomes diferentes, para cada campo que vc desejar que seja incrementado, sugiro apenas que vc use nomes que atrelem este generator a uma tabela, caso vc tenha mais de uma, para facilitar a identificação.
Espero ter ajudado...
T+
Gostei + 0
24/06/2004
Christian_adriano
Criei a Tabela teste com o Campo Codigo do tipo ´Integer not null´ e como chave primaria.
Depois tentei criar o gerador e a Trigger mais ocorreu o seguinte erro:
´Unexpected end of Command (SQL error code = -104)´
O q esta errado ??
Segue abaixo como tetei fazer....
CREATE GENERATOR AutoIncremento_Teste; /** Nome do Gerador **/
CREATE TRIGGER AutoIncremento_Teste
/** Nome do Trigger **/
FOR Teste /** Tabela **/
BEFORE
INSERT POSITION 0 AS BEGIN
NEW.CodigoI=GEN_ID(AutoIncremento_Teste, 1);
/** Nome do Gerador, Valor da Icrementação **/
END
Gostei + 0
24/06/2004
Christian_adriano
no código q eu postei aki não tem o ´I´, aconteceu na hora de digitar, segue abaixo o correto....
CREATE GENERATOR AutoIncremento_Teste; /** Nome do Gerador **/
CREATE TRIGGER AutoIncremento_Teste
/** Nome do Trigger **/
FOR Teste /** Tabela **/
BEFORE
INSERT POSITION 0 AS BEGIN
NEW.Codigo´I´=GEN_ID(AutoIncremento_Teste, 1);
/** Nome do Gerador, Valor da Icrementação **/
END
Gostei + 0
24/06/2004
Vinicius2k
Se na sua tabela o campo a ser incrementado se chama Cod_cli então a sintaxe correta seria :
Estava correto no seu primeiro post...
Veja um exemplo :
/* Tabela: CLIENTES */ CREATE TABLE CLIENTES ( IDCLIENTE INTEGER NOT NULL, NOME VARCHAR(50), ); ALTER TABLE CLIENTES ADD CONSTRAINT PK_CLIENTES PRIMARY KEY (IDCLIENTE); /* Generator: GEN_CLIENTES_IDCLIENTE */ CREATE GENERATOR GEN_CLIENTES_IDCLIENTE; SET TERM ^ ; /* Trigger: TRG_GEN_CLIENTES_IDCLIENTE */ CREATE TRIGGER TRG_GEN_CLIENTES_IDCLIENTE FOR CLIENTES ACTIVE BEFORE INSERT POSITION 0 AS BEGIN NEW.IDCLIENTE = GEN_ID(GEN_CLIENTES_IDCLIENTE,1); END ^ SET TERM ; ^
Aonde vc está executando este script? se for no IBExpert use a ferramenta Script Executive, se for no IBConsole o melhor é executar e comittar cada criação separadamente...
Espero ter ajudado...
Gostei + 0
25/06/2004
Christian_adriano
Não sei o q estava errado antes no primeiro post...
mais depois q eu coloquei
[color=red:378f2ba960]SET TERM ^ ;[/color:378f2ba960]
...
[color=red:378f2ba960]^ [/color:378f2ba960]
...
[color=red:378f2ba960]SET TERM ; ^ [/color:378f2ba960]
Funcionou perfeitamente...
Agora estou com outra duvida, pra que serve isso acima ??
... e outra coisa, agora posso fazer um INSERT tranquilamente sem preencher o campo Auto Incemento q o banco vai preencher pra mim, ou vou ter q fazer algo pra chamar essa Trigger ??
Desde já agradeço a sua Atenção.
Gostei + 0
25/06/2004
Vinicius2k
Instruções SQL usam o terminador [color=red:d7f1feca01];[/color:d7f1feca01] e é necessário definir qual será o terminador no caso, [color=red:d7f1feca01]^[/color:d7f1feca01], para o código da trigger.
Sim, vc pode começar a utilizar sua tabela, que a trigger será disparada automaticamente.
T+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)