Ir para conteúdo

POWERED BY:

Arquivado

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

correia97

Stored Procedure

Recommended Posts

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

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

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

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

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

 

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.