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

(Resolvido) Procedure


rafaeldorazio

Pergunta

por exemplo, como eu passo fun_nome=Rafael Fernandes para que a procedure leia isso ?

Sendo que a sp_query é

fun_nome=Rafael Fernandes
DELIMITER $$

DROP PROCEDURE IF EXISTS `sp_select_delete_funcionario` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_select_delete_funcionario`(

  IN sp_query VARCHAR(100)

)
BEGIN

      SELECT * FROM Funcionario WHERE sp_query;

  END IF;

END $$

DELIMITER;

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'rafaeldorazio'

O que você está pedindo é um gerador de query dinâmica.

Faça assim:

DELIMITER $$;
DROP PROCEDURE IF EXISTS `sp_select_delete_funcionario` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_select_delete_funcionario`(IN sp_query VARCHAR(100))
BEGIN
    SET @meuSQL = CONCAT('SELECT * FROM Funcionario WHERE ',  sp_query);
    PREPARE M_stmt FROM @meuSQL;
    EXECUTE M_stmt;
    DEALLOCATE PREPARE stmt;
END $$

DELIMITER;
Para executar esta SP use:
call sp_select_delete_funcionario('fun_nome="Rafael Fernandes" ');

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'rafaeldorazio'

esta parte do ocdigo o que ela faz ?
PREPARE M_stmt FROM @meuSQL; -- cria uma área na memória e transforma a string em @meuSQL em comando 
EXECUTE M_stmt; -- Executa o comando gerado na área criada
DEALLOCATE PREPARE stmt; -- Limpa e Libera a memória da área alocada

Uma dúvida, este código ele deixa a procedure lenta ?
Um pouco sim. Mas nada perceptível com as máquinas atuais.
Link para o comentário
Compartilhar em outros sites

  • 0
você me aconselharia a usar para fazer Pesquisa na tabela ?

Este é um caso de responder Sim e Não.

Sim se o atributo escolhido para estar na cláusula where puder ser usado por algum índice desta tabela. Ou se a tabela possuir uma quantidade pequena de registros.

Não se o atributo usado na cláusula where não puder ser usado por indices desta tabela, ou se a tabela possuir uma grande quantidade de registros.

Quando se usa atributos na cláusula where o motor do MySQL tenta usar um índice para agilizar resposta a consulta. Quando a tabela possui muitos registros e o motor do MySQL não consegue usar um índice para agilizar a resposta a consulta então a consulta gera um TABLE SCAN, que é uma varredura completa registro a registro na tabela, do´primeiro ao último registro, o que pode demorar muito para dar resposta.

Pense bem nos atributos e condições que você vai colocar na passagem de parâmetros para esta procedure.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

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