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

(Resolvido) Nome do Campo da Tabela em Variavel


Danleonhart

Pergunta

Pessoal...

Tem como colocar o nome de um campo como variável em uma Procedure ?

Tipo assim:

Tenho uma Procedure que estou modificando para que o campo onde será feita a pesquisa seja uma variável passada como parâmetro:

DELIMITER ??
DROP PROCEDURE IF EXISTS sp_Pesquisa ??
CREATE DEFINER=`root`@`localhost` PROCEDURE sp_Pesquisa (IN vCampo VARCHAR(30),IN vCriterio VARCHAR(50))

 BEGIN

  SELECT ID_Clientes,Cliente,Contato,Email
  FROM tab_dados
  WHERE (vCampo) LIKE CONCAT ('%',vCriterio,'%');

 END ??
DELIMITER;
Chamada:
CALL sp_Pesquisa ('Cliente', 'Silva')

Fiz assim e não funciona...se retiro o parâmetro "vCampo" deixando apenas o "vCriterio", e informo o nome real do campo, a SP funciona 100%.

Sendo assim, o erro está na forma que estou usando a variável "vCampo"...

Alguém sabe como posso corrigir isso ?

Editado por Denis Courcy
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Tem como colocar o nome de um campo como variável em uma Procedure ?

Estude o comando PREPARE.

mysql> SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
mysql> PREPARE stmt2 FROM @s;
mysql> SET @a = 6;
mysql> SET @b = 8;
mysql> EXECUTE stmt2 USING @a, @b;
+------------+
| hypotenuse |
+------------+
| 10 |
+------------+
mysql> DEALLOCATE PREPARE stmt2;

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado Denis Courcy !

Pelo que li e entendi o comando PREPARE vai mais além do que preciso.

Mas consegui resolver e modificar minha SP.

Ficou assim:

DELIMITER ??
DROP PROCEDURE IF EXISTS sp_Pesquisa ??
CREATE DEFINER=`root`@`localhost`
PROCEDURE sp_Pesquisa(IN `vCampo` VARCHAR(30), IN `vCriterio` VARCHAR(50))

/*
  SP sendo usada pela aplicação.
 Esta Stored Procedure executa um filtro que retorna os valores
 aproximados do texto informado no parâmetro "vCriterio", pois utilizando
 o coringa "%", independente de onde esteja o texto (inicio, meio ou fim) na frase salva 
 no Campo ele será retornado. 
*/
  
 BEGIN

 SET @Crit = CONCAT('\'%',vCriterio,'%\'');
 SET @vSQL = CONCAT('SELECT ID_Clientes,Cliente,Contato,Email FROM tab_dados WHERE ', vCampo, ' LIKE ', @Crit);

PREPARE my_Statement FROM @vSQL;
EXECUTE my_Statement;

 END ??
DELIMITER;
Para chamar a SP:
CALL sp_Pesquisa('Cliente','silva')

O resultado é a listagem de todos os clientes que contenham em seu nome o "Silva".

VALEU !

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...