correia97 1 Denunciar post Postado Julho 31, 2009 Boa tarde pela 1º vez que estou trabalahndo com procedute no mysql ja havia feito no SQLServer e me deparei com um problema minha procedure simplesmente não funciona e não sei onde esta o erro já pesquisei no google e aparentemente ninguém usa o comando "LIKE" em uma procedure no Mysql segue abaixo meu codigo CREATE DEFINER = 'root'@'localhost' PROCEDURE `proc`( IN busca VARCHAR(160) ) BEGIN SELECT `tabela1`.`campo1`,`tabela1`.`campo2` FROM `tabela1` join `tabela2` on ((`tabela1`.`campo3` = `tabela2`.`campo1`)) WHERE `tabela1`.`campo1` LIKE '%'"busca"'%' OR `tabela1`.`campo2` LIKE '%'"busca"'%'; END; o campo1 da tabela2 é a chave primaria e ela a chave estrangeira campo3 da tabela1 quando eu executo a procedure ela me retorna vazia mesmo eu digitando um valor exatamente igual ao q esta no banco agradeço qualquer tipo de dica vlw Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Julho 31, 2009 Se testar o Sql fora da procedure funciona? Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
correia97 1 Denunciar post Postado Agosto 1, 2009 fora da procedure eu faria assim SELECT `tabela1`.`campo1`,`tabela1`.`campo2` FROM `tabela1` join `tabela2` on ((`tabela1`.`campo3` = `tabela2`.`campo1`)) WHERE `tabela1`.`campo1` LIKE '%busca%' OR `tabela1`.`campo2` LIKE '%busca%' Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Agosto 3, 2009 Mas a minha pergunta é se fora da procedure funciona como deseja? Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
correia97 1 Denunciar post Postado Agosto 3, 2009 Mas a minha pergunta é se fora da procedure funciona como deseja? Abraços... Então fora da procedure funciona da forma que eu coloquei acima mas se eu tento criar a procedure desta forma ele me gera um erro de sintax e para cria a mesma procedure no SQLServer trocando apenas a aspa dupla por um sinal de "+" no LIKE ela tbm funciona no Mysql q ainda não consegui descobrir o que estou fazendo errado obs.: com sinal de "+" no MYsql da erro de sintax tbm segue abaixo como ficaria a procedure no SQLServer CREATE PROCEDURE `proc`( @busca VARCHAR(160) ) BEGIN SELECT `tabela1`.`campo1`,`tabela1`.`campo2` FROM `tabela1` join `tabela2` on ((`tabela1`.`campo3` = `tabela2`.`campo1`)) WHERE `tabela1`.`campo1` LIKE '%'+@busca+'%' OR `tabela1`.`campo2` LIKE '%'+@busca+'%'; END; Compartilhar este post Link para o post Compartilhar em outros sites
correia97 1 Denunciar post Postado Agosto 4, 2009 então galera axei um exemplo na net e comecei a usar um manipular do banco de dados chamado SQL Manager for Mysql o qual tem um ferramentas para auxiliar na manipulação do banco, e com ajuda do exemplo junatamente com esta ferramenta consegui criar parcialmento o que eu queria mas ainda falta alguns ajustes ja consegui usar 1 like na procedure porem preciso usar o like em 2 campos isso ainda não consegui fazer segue abaixo o codigo Obs.: por algum motivo q ainda não identifiquei quando eu executo a procedure pelo sql manager ela funciona corretamente mas quando utilizo algo mais simples para criar a procedure como o phpMyadim com exatamente o mesmo codigo gerado pelo sql manager ele me retorna um erro na linha 9 ja tentei trocar as aspas o ponto e virgula e sempre me retorna erro na linha 9 CREATE DEFINER = 'root'@'localhost' PROCEDURE `proce`( IN busca VARCHAR(160) ) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER COMMENT '' BEGIN SET @buscar = CONCAT('%',busca,'%'); SET @sql = 'SELECT `tabela1`.`campo1`,`tabela1`.`campo2` FROM `tabela1` join `tabela2` on ((`tabela1`.`campo3` = `tabela2`.`campo1`)) WHERE `tabela1`.`campo1` LIKE ?'; PREPARE strm FROM @sql; EXECUTE strm USING @buscar; END; Se alguem tiver uma ideia para solucionar meu problema Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Agosto 4, 2009 Se utilizar o LIKE da mesma forma no segundo campo não funciona? Não bastaria adicionar um AND? Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
correia97 1 Denunciar post Postado Agosto 4, 2009 Se utilizar o LIKE da mesma forma no segundo campo não funciona? Não bastaria adicionar um AND? Abraços... Na verdade eu preciso usar um OR mas não é simplemente adicionar tem mais algum tipo de configuração/parametro necessaria Compartilhar este post Link para o post Compartilhar em outros sites
r7c4rd0 0 Denunciar post Postado Agosto 6, 2009 Mas a minha pergunta é se fora da procedure funciona como deseja? Abraços... Então fora da procedure funciona da forma que eu coloquei acima mas se eu tento criar a procedure desta forma ele me gera um erro de sintax e para cria a mesma procedure no SQLServer trocando apenas a aspa dupla por um sinal de "+" no LIKE ela tbm funciona no Mysql q ainda não consegui descobrir o que estou fazendo errado obs.: com sinal de "+" no MYsql da erro de sintax tbm segue abaixo como ficaria a procedure no SQLServer CREATE PROCEDURE `proc`( @busca VARCHAR(160) ) BEGIN SELECT `tabela1`.`campo1`,`tabela1`.`campo2` FROM `tabela1` join `tabela2` on ((`tabela1`.`campo3` = `tabela2`.`campo1`)) WHERE `tabela1`.`campo1` LIKE concat('%',@busca,'%') OR `tabela1`.`campo2` LIKE '%'+@busca+'%'; END; Veja no mysql a sintaxe ficaria assim usando a funcao concat() Compartilhar este post Link para o post Compartilhar em outros sites