Ir para conteúdo
Fórum Script Brasil
  • 0

if em trigger dando erro


winthorp

Pergunta

Olá pessoal,

estou me debatendo a um bom tempo e não consegui resolver a seguinte situação:

- Tenho uma tabela (TAB_A) com os campos codFuncionario e valorComissao onde faço um INSERT que dispara uma TRIGGER. Essa TRIGGER deverá inserir na TAB_B o codFuncionario e valorComissao.

- Na TAB_B, o codFuncionario não poderá ser repetido de forma que se esse código ainda não existir eu faço um INSERT, se já existir, devo fazer um UPDATE apenas no campo valorComissao.

Não consigo criar uma TRIGGER que verifique se o codFuncionario que está sendo inserido na TAB_B já existe.

TAB_A

codFuncionario <--- O Mesmo funcionario pode ter várias comissões (vários registros). Cada insert dispara a TRIGGER para lançar a soma da comissão na TAB_B

valorComissao

TAB_B

codFuncionario <--- Não pode ser repetido

valorComissao <--- receberá a soma das comissões da TAB_A(lógica já implementada no java)

Abaixo, segue uma tentativa de criar a TRIGGER onde tentei fazer algo parecido com o tutorial desse link.

http://www.devmedia.com.br/post-8088-MySQL-TRIGGERS.html

Agradeço qualquer ajuda.

CREATE TRIGGER   
    TRIG_COMISSAO   
    AFTER   
    INSERT   
ON   
    TAB_A   
    FOR EACH ROW   
BEGIN   
  SELECT IF(codprofissional=1,'EXISTE','não EXISTE') codprofissional FROM TAB_B <-- SE RODAR ESSE SELECT ISOLADAMENTE, FUNCIONA   
  IF(@codprofissional='EXISTE') THEN   
    UPDATE TAB_B SET VALORCOMISSAO=NEW.VALORCOMISSAO   
  ELSE   
      INSERT INTO TAB_B SET CODPROFISSIONAL=NEW.CODPROFISSIONAL, VALORCOMISSAO=0   
  END IF   
END;
CREATE TRIGGER
    TRIG_COMISSAO
    AFTER
    INSERT
ON
    TAB_A
    FOR EACH ROW
BEGIN
  SELECT IF(codprofissional=1,'EXISTE','não EXISTE') codprofissional FROM TAB_B <-- SE RODAR ESSE SELECT ISOLADAMENTE, FUNCIONA
  IF(@codprofissional='EXISTE') THEN
    UPDATE TAB_B SET VALORCOMISSAO=NEW.VALORCOMISSAO
  ELSE
      INSERT INTO TAB_B SET CODPROFISSIONAL=NEW.CODPROFISSIONAL, VALORCOMISSAO=0
  END IF
END;
Script line: 1 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF(@codprofissional='EXISTE') THEN UPDATE TAB_B SET VALORCOMISSAO=NEW' at line 10 -- A TRIGGER ABAIXO FUNCIONA, MAS NÃO FAZ A VERIFICAÇÃO QUE PRECISO
CREATE TRIGGER   
    TRIG_COMISSAO   
    AFTER   
    INSERT   
ON   
    TAB_A   
    FOR EACH ROW   
    INSERT INTO TAB_B   
    SET CODPROFISSIONAL=NEW.CODPROFISSIONAL, VALORCOMISSAO=0;

Editado por Denis Courcy
Melhorar entendimento do código
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Pelo que vejo, seu erro esta aqui: IF(@codprofissional='EXISTE') THEN

Não vi você criar esta variável em nenhum lugar: @codprofissional

tenta fazer assim:

SELECT count(codprofissional) FROM tab_b WHERE "CONDIÇÃO" INTO @codprofissional;

IF (@codprofissional > 0) THEN
...
END IF;

Editado por Marcos-rj
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...