Ir para conteúdo

POWERED BY:

Arquivado

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

Gisele.Passoni

Trigger com auto incremento

Recommended Posts

Ola Pessoal!

Desenvolvi um sistema em php onde o pessoa de um setor aqui do serviço poderá fazer solicitações para outros setores. Preciso criar um Trigger no mysql que faça o seguinte: Crie um auto incremento para cada solicitação. Um setor faz uma solicitação, então será o id 1, depois o 2 etc, ai se outro setor for fazer uma solicitação, não é pra continuar 3, 4 e sim começar do 1 novamente! Cada vez que um setor for fazer sua solicitação, terá que continuar o id da solicitação daquele setor.

 

Eu consegui esse exemplo, mas está dando erro!

 

consulta SQL:

 

delimiter $$

CREATE trigger `solicitacao_BI` before INSERT ON `solicitacao`

FOR each ROW BEGIN

SET @num =0;

SELECT max( id_solicitacao ) FROM `solicitacao` WHERE id_setor = NEW.id_setor INTO @num ;

IF @num IS NULL THEN @num =0;

@num = @num +1;

NEW.id_solicitacao = @num ;

END $$

 

Mensagens do MySQL :

 

#1064 - 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 '@num=0;

@num=@num+1;

NEW.id_solicitacao= @num;

end $$' at line 6

 

O que poderia ser esse erro? É a primeira vez que tento criar trigger.

Desde já agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

A princípio o trigger não vai retornar valor, ele não retorna valores, o que você poderia fazer nesse caso, se o campo não estiver definido como AutoIncrement é criar uma função para gerar os seus Ids e chamar ela no insert, ou seja, gerar o id "na mão".

 

No caso do erro que está ocorrendo, poderia utilizar a função IFNULL do MYSQL:

 

delimiter $$ 
CREATE trigger `solicitacao_BI` before INSERT ON `solicitacao` 
FOR each ROW BEGIN 
SET @num =0;
SELECT IFNULL(max( id_solicitacao ), 0) FROM `solicitacao` WHERE id_setor = NEW.id_setor INTO @num ;
NEW.id_solicitacao = @num + 1 ;
END $$

 

Nesse caso ele vai jogar zero se o resultado do max for null.

Mas enfatizando, até onde tenho conhecimento, essa trigger não vai conseguir gerar o novo id, já que o MySQL não possui o generator.

O que você poderia fazer, se quiser mesmo usar trigger para este caso, seria fazer um update no campo do id no after insert aí sim, fazendo um select e colocando o id desejado.

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.