GARANTIR DESCONTO

Fórum Gerador no IB/FB #45102

24/06/2004

0

Olá,

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

Christian_adriano

Responder

Posts

24/06/2004

Vinicius2k

Colega,

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+


Responder

Gostei + 0

24/06/2004

Christian_adriano

Olá,

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


Responder

Gostei + 0

24/06/2004

Christian_adriano

Desculpa,


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


Responder

Gostei + 0

24/06/2004

Vinicius2k

Cristian,
NEW.[color=red:e83169bee4]Codigo´I´[/color:e83169bee4]=GEN_ID(AutoIncremento_Teste, 1);

Se na sua tabela o campo a ser incrementado se chama Cod_cli então a sintaxe correta seria :
NEW.[color=red:e83169bee4]Cod_cli[/color:e83169bee4]=GEN_ID(AutoIncremento_Teste, 1);

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...


Responder

Gostei + 0

25/06/2004

Christian_adriano

Obrigado vinicius2K,

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.


Responder

Gostei + 0

25/06/2004

Vinicius2k

Cristian,

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+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar