Ir para conteúdo

POWERED BY:

Arquivado

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

Pavelski

Storad Procedure com consulta em duas colunas

Recommended Posts

Buon Giorno senhores.

Venho à algum tempo pesquisando nos tópicos mas realmente não consegui achar uma solução para o meu problema.

Seguinte

Eu estou tentando criar uma SP para validação.

O usuário informa um valor, na primeira variável é feita a pesquisa pra ver se esse valor existe no DB, na segundo ele verifica se esse valor existente esta habilitado para tal tarefa.

 

Minha tabela user é mais ou menos assim:

 

user

 

ID | user | quota | empresa | habilitando |

 

01 | joao | 25 | Valve | HABILITADO |

 

Para se autenticar em meu sistema o valor a ser passado deve ser "joao HABILITADO" .

 

Eu criei a seguinte procedure:

 

DELIMITER //

CREATE PROCEDURE checando(user VARCHAR(70));

BEGIN

SELECT user INTO @checando1 FROM user WHERE user ='%s';

IF ISNULL(@checando1) THEN

SELECT habilitando INTO @checando2 FROM user WHERE user='@chacando1';

IF (@checando2 == "HABILITADO") THEN

SELECT '@checando1 HABILITADO' as MSG;

ELSE

SELECT 'Usuário Inválido' as MSG;

END IF;

ELSE

SELECT 'Um usuário precisa ser infotmado.' as MSG;

END IF;

END; //

 

 

Mas ao tentar criar esta SP eu recebo o seguinte erro:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ';

BEGIN

SELECT user INTO @checando1 FROM user WHERE user ='%s';

IF ISNULL(@ch' at line 1

 

Alguém pode me dar uma luz?

Desde já agradeço.

 

E como diria o mestre, "Dá uma licençinha pro Madruguinha que ele vai tomar uma aguinha"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hi!

Bom camarada, tu não irá conseguir por que o nome da tabela que você criou ela eh reservada."user"

 

a sua possível solução e colocar o nome do banco de dados junto com o nome da tabela ex.:

 

db_meu_banco.user

 

db_meu_banco -- Nome da sua data base

user -- Nome da tabela

 

:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hi!

Bom camarada, tu não irá conseguir por que o nome da tabela que você criou ela eh reservada."user"

 

a sua possível solução e colocar o nome do banco de dados junto com o nome da tabela ex.:

 

db_meu_banco.user

 

db_meu_banco -- Nome da sua data base

user -- Nome da tabela

 

:thumbsup:

 

No caso meu db chama-se tangamandapio, então ficaria:

 

CREATE PROCEDURE checando('tangamandapio'.'user' VARCHAR(70)); ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim meu camarada:

 

delimiter //

create procedure checando( usuario varchar(70));

begin

select a.user into @checando1

from tangamandapio.user as a

where a.user ='%s';

if isnull(@checando1) then

select habilitando into @checando2

from tangamandapio.user as a

where a.user='@chacando1';

if (@checando2 == "HABILITADO")

then

select '@checando1 HABILITADO' as MSG;

else

select 'Usuário Inválido' as MSG;

end if;

end; //

 

 

O parâmetro que você esta criado pode colocar outro nome como o que eu coloquei?

 

Abraços :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posso sim, mas só para eu entender algumas coisas..

 

create procedure checando( usuario varchar(70)); --o nome tem que ser diferente da tabela por causa de conflito ou padrão da linguagem?

 

select a.user into @ (não entendi o porque deste "a." e nem do "from tangamandapio.user "as a"")

 

Agradeço a boa vontade desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

create procedure checando( usuario varchar(70)); --o nome tem que ser diferente da tabela por causa de conflito ou padrão da linguagem?

R: tem que ser diferente em questão do padrão da linguagem.

 

select a.user into @ (não entendi o porque deste "a." e nem do "from tangamandapio.user "as a"")

R: "a." eu dei o nome da sua tabela user de "a" se não iri ficar muito extensa "tangamandapio.user"

R: "from tangamandapio.user " com a sua tabela tem o mesmo nome de uso restrito tive que colocar o nome do seu banco de dados antes do nome da sua tabela para saber aonde esta localizado essa tabela

 

Deu certo o que você queria.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi, não conhecia essa função de abreviaçã "as" qualquer-coisa valew pelo ensinamento.

 

Mas ainda não deu certo não... Parece que não lê o comando inteiro, a mensagem de erro que recebo é:

 

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ';

begin

select a.user into @checando1

from tangamandapio.user as a

where a.user ='%s'' at line 1 -- observando que o aparece '' entes de at line 1 sendo que no comando da SP finaliza com apenas um ='%s';

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.