Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Nome do Campo da Tabela em Variavel


Danleonhart
 Share

Question

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 ?

Edited by Denis Courcy
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.9k
    • Total Posts
      648.8k
×
×
  • Create New...