Duvida com trigger

alguem poderia me dar uma força com um trigger

é um trigger pro insert…o nome da tabela e destinatario…
preciso de uma trigger para inserir um dado na tabela destinatario na hora em que eu estiver inserindo um dado nela

como isos ficaria??

quero fazer a inserçao o primeiro if
fiz assim mas da erro no select, isso esta certo??

AS
   declare
   contId integer;

   begin

  IF (INSERTING) THEN
       contid = select max(id_destinatario) from destinatario where old.id_empresa = new.id_empresa;
       INSERT INTO destinatario (new.id_fantasia) values (contid+1) ;
       INSERT INTO log (TABELA, DATA, DESCRICAO, ACAO) VALUES ('DESTINATARIO', current_timestamp,  'COD:' || new.id_destinatario || ' NOME: ' || new.nome_fantasia, 0);
  ELSE
  IF (UPDATING) THEN
       INSERT INTO log (TABELA, DATA, DESCRICAO, ACAO) VALUES ('DESTINATARIO', current_timestamp, 'COD:' || new.id_destinatario || ' NOME: ' || new.nome_fantasia, 1);
  ELSE
  IF (DELETING) THEN BEGIN
       INSERT INTO log (TABELA, DATA, DESCRICAO, ACAO) VALUES ('DESTINATARIO', current_timestamp, 'COD:' || old.id_destinatario || ' NOME: ' || old.nome_fantasia, 2);
  END
end

Se for Firebird voce deve utilizar dessa forma

AS       
BEGIN
  IF (INSERTING) THEN  
       contid = select coalesce(max(id_destinatario),0)+1 from destinatario where old.id_empresa = new.id_empresa into new.id_fantasia;            
       INSERT INTO log (TABELA, DATA, DESCRICAO, ACAO) VALUES ('DESTINATARIO', current_timestamp,  'COD:' || new.id_destinatario || ' NOME: ' || new.nome_fantasia, 0);  
  ELSE  
  IF (UPDATING) THEN  
       INSERT INTO log (TABELA, DATA, DESCRICAO, ACAO) VALUES ('DESTINATARIO', current_timestamp, 'COD:' || new.id_destinatario || ' NOME: ' || new.nome_fantasia, 1);  
  ELSE  
  IF (DELETING) THEN BEGIN  
       INSERT INTO log (TABELA, DATA, DESCRICAO, ACAO) VALUES ('DESTINATARIO', current_timestamp, 'COD:' || old.id_destinatario || ' NOME: ' || old.nome_fantasia, 2);  
  END  
end

to usando firebird 2.1 e mesmo assimc continua com esse erro

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 10, column 17.
select

a trigger ficou assim

AS
   declare
   contId integer;

   begin

  IF (INSERTING) THEN
       contid = select coalesce(max(id_destinatario),0)+1 from destinatario where old.id_empresa = new.id_empresa;
       INSERT INTO destinatario (new.id_fantasia) values (contid+1) ;
       INSERT INTO log (TABELA, DATA, DESCRICAO, ACAO) VALUES ('DESTINATARIO', current_timestamp,  'COD:' || new.id_destinatario || ' NOME: ' || new.nome_fantasia, 0);
  ELSE
  IF (UPDATING) THEN
       INSERT INTO log (TABELA, DATA, DESCRICAO, ACAO) VALUES ('DESTINATARIO', current_timestamp, 'COD:' || new.id_destinatario || ' NOME: ' || new.nome_fantasia, 1);
  ELSE
  IF (DELETING) THEN BEGIN
       INSERT INTO log (TABELA, DATA, DESCRICAO, ACAO) VALUES ('DESTINATARIO', current_timestamp, 'COD:' || old.id_destinatario || ' NOME: ' || old.nome_fantasia, 2);
  END
end

Substitua as linhas
contid = select coalesce(max(id_destinatario),0)+1 from destinatario where old.id_empresa = new.id_empresa;
INSERT INTO destinatario (new.id_fantasia) values (contid+1) ;
pela linha abaixo

select coalesce(max(id_destinatario),0)+1 from destinatario where old.id_empresa = new.id_empresa into new.id_fantasia;

pois a tabela da trigues é a propria onde o campo new.id_fantasia pelo que voce colocou quando precisar colocar o resutado de uma sql em um campo utilizando triguer procure fazer da seguinte forma Select Campo_Origem from Tabela Condicao into new.Campo_Destino

eu fiz que nem vc postou no exemplo mas esta dando ume erro no else, e quando tiro a linha de insert ele compila perfeitamente, sera o q pode ser?

Coloque cada bloco de instrução dentro de um begin end

quase deu…

mas acho q nem alguma coisa errada na logica:

select coalesce(max(old.id_fantasia),0)+10 from destinatario where old.id_empresa = new.id_empresa into new.id_fantasia;

pq ele deveria pegar o maior do campo id_fantasia… mas ele grava no banco o valor 10 como se tivesse somando 0+10

select coalesce(max(old.id_fantasia),0)+10 from destinatario where old.id_empresa = new.id_empresa into new.id_fantasia;

o problema está aki como você está fazendo um select não exite OLD no campos do select.

select coalesce(max(id_fantasia),0)+1 from destinatario where old.id_empresa = new.id_empresa into new.id_fantasia;

o mesmo ira pegar o maior valor do campo ID_FANTASIA se somar 1 caso não existe nenhum valor o campo seja null em todos os registros ou a tabela eseja vazia o coalesce faz com que ele retorno 0 ai 0+1 = 1 e o seu tratamento ficara correto.