Ir para conteúdo

POWERED BY:

Arquivado

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

Vinicius O. Nepomuceno

Gatilho para chamar um Procedimento

Recommended Posts

Pessoal, boa tarde ! Estou precisando um implementar uma nova rotina em um sistema que segue um principio simples abaixo, porém não tenho tido sucesso nos testes, vejam se conseguem me ajudar.

Tenho uma procedure apenas para retornar um texto, esta por sua vez precisa ser chamada toda vez que eu executar um insert. Porém o mysql está dando esse erro:

Error Code: 1415. Not allowed to return a result set from a trigger


DELIMITER $
CREATE PROCEDURE incluirP ()
begin
SELECT 'Realizada uma Inclusão na tabela cursos';
END $$
DELIMITER $$


DELIMITER $$
CREATE TRIGGER incluirT AFTER INSERT ON cursos
FOR EACH ROW
BEGIN
CALL incluirP(new.codigo);
END;
$$

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

DELIMITER $
CREATE PROCEDURE incluirP ()
    begin        
        SELECT 'Realizada uma Inclusão na tabela cursos';
    END $$
DELIMITER $$

essa procedure retorna a string ali, ok.

 

 

DELIMITER $$
CREATE TRIGGER incluirT AFTER INSERT ON cursos
FOR EACH ROW
BEGIN
CALL incluirP(new.codigo);
END;
$$

essa trigger chama a procedure e a procedure devolve a string, o que vc quer fazer c/ ela? vc n pode retornar na trigger.

esse parametro new.codigo é praq? vc n usa e nem declarou parametros la na procedure

Compartilhar este post


Link para o post
Compartilhar em outros sites

O new.codigo foi apenas um teste que fiz, já no nível perdido total....

 

Mas o que preciso é que a string que está na procedure seja apresentada toda vez que der um insert através da trigger. Isso é possível?

 

apresentada p/ quem estiver usando o sistema? acho que daí você tem que fazer fora do banco.

 

a trigger serveria p/ você manipular algo do banco, você nao pode retornar nada dentro de uma trigger.

por exemplo, no seu código ali, você pode armazenar o call da trigger em uma variavel, ficaria assim(a sintaxe esta errada):

DELIMITER $$
CREATE TRIGGER incluirT AFTER INSERT ON cursos
FOR EACH ROW
BEGIN
@variavel_teste = CALL incluirP(new.codigo);
//dai agora você pode fazer alguma coisa com a variavel_teste, pq agora o call da procedure esta retornando dentro da variavel
END;
$$

OBS.: a sintaxe que eu postei está errada, é apenas para ilustrar, mas tipo, evite ao maximo chamar procedures dentro de triggers, triggers tem a mesma estrutura que procedures praticamente, entao oq você faz em um faz no outro, em poucos casos chamar uma procedure seria conveniente.

 

 

sintaxe correta seria +- assim, mas pelo que eu entendi q vc quer fazer, não vai fazer diferença,s e vc quiser mostrar essa mensagem na tela do usuario, faz lá na linguagem de programaçao, ali na trigger vc poderia no maximo salvar a string em alguma tabela do banco, o que seria meio inútil nesse caso

 

 

DELIMITER $
CREATE TRIGGER incluirT AFTER INSERT ON cursos
FOR EACH ROW
BEGIN
DECLARE variavel_teste VARCHAR(255);
SELECT "Realizada uma Inclusão na tabela cursos" INTO variavel_teste;//eu realmente desconheço como fazer c/ procedure
END;
$

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.