Ir para conteúdo

POWERED BY:

Arquivado

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

andfera

Fazer busca - Stored Procedures

Recommended Posts

Pessoal,

 

gostaria de fazer um SP_INSERT, porem ele vai analizar 2 colunas, caso o dado a ser inserido ja exista ele manda uma mensagem!

 

Porem não estou conseguindo fazer essa verificação dos dados!

 

Favor me ajudem!!!

 

Abraços

 

Andfera

 

Segue meu codigo!

 

DELIMITER $$

DROP PROCEDURE IF EXISTS `xprojetos`.`SP_cadastro_INSERT` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_cadastro_INSERT`(v_nome VARCHAR(100), v_login VARCHAR(10), v_senha VARCHAR(8), v_mail VARCHAR(100))
BEGIN
select funcio_nome from cad_funcionario;
select funcio_login from cad_funcionario;
IF ((v_nome != funcio_nome) && (v_login != funcio_login) && (v_senha != '') && (v_mail != '')) THEN
INSERT INTO cad_funcionario (funcio_nome, funcio_login, funcio_senha, funcio_mail)
VALUES (v_nome, v_login, v_senha, v_mail);
ELSE
SELECT 'Nome ou Login já consta no cadastro' AS Msg;
END IF;
END $$

DELIMITER;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá: http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Criamos uma tabela de exemplo:

 

mysql> create table tbl_funcionario (
	->  funcio_id int not null auto_increment primary key,
	->  funcio_nome char(80) not null,
	->  funcio_login char(20) not null unique,
	->  funcio_senha char(20) not null
	-> );

Inserimos um registro na tabela criada:

 

mysql> insert into tbl_funcionario set funcio_nome ='Wagner Bianchi', funcio_login ='wagner', funcio_senha ='bianchi';

Fazemos um SELECT na tabela para checar o dado inserido:

 

mysql> select * from tbl_funcionario;
+-----------+----------------+--------------+--------------+
| funcio_id | funcio_nome	| funcio_login | funcio_senha |
+-----------+----------------+--------------+--------------+
|		 1 | Wagner Bianchi | wagner	   | bianchi	  |
+-----------+----------------+--------------+--------------+
1 row in set (0.05 sec)

Vamos desenvolver agora o Stored Procedure para saber se temos na tabela, um funcionario cadastrado, cujo nome, login e senha sejam iguais aos enviados ao procedimento, caso seja, não ele insere senão, envia uma mensagem de erro:

 

mysql> delimiter //
mysql> create procedure sp_checa(v_nome char(80), v_login char(20), v_senha char(20))
	-> begin
	->  -- selecionamos para contar se existe um usuário com as informações
	->  -- passadas como parâmetro
	->  select funcio_nome, funcio_login, funcio_senha into @nome, @login, @senha
	->  from tbl_funcionario
	->  where funcio_nome =v_nome and funcio_login =v_login and funcio_senha =v_senha
	->  limit 1;
	->  -- condicional para checar se as variáveis do usuário tem valor != ''
	->  if ((@nome != '') && (@login != '') && (@senha != '')) then
	->	 select 'Funcionário já cadastrado!'as Msg;
	->  else
	->	 insert into tbl_funcionario set funcio_nome =v_nome, funcio_login =v_login, funcio_senha =v_senha;
	->  end if;
	-> end;
	-> //
Query OK, 0 rows affected (0.00 sec)

Como criamos o procedimento, que, faz um SELECT e pega os resultados recuperados e os coloca respectivamente dentre de variáveis do usuário, criadas para serem validadas na condicional que segue o fluxo do programa. Se as variáveis forem diferentes de vazio, significa que temos o usuário na tabela, caso contrário, o programa insere o novo funcionário, ao cair no else.

 

Vamos testar:

 

mysql> call sp_checa('Wagner Bianchi', 'wagner', 'bianchi');
	-> //
+----------------------------+
| Msg						|
+----------------------------+
| Funcionário já cadastrado! |
+----------------------------+
1 row in set (0.00 sec)

Espero ter ajudado, forte abraço!! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito Obrigado Wagner!!!

 

Me ajudou MUITO!!!

 

Implementei sua dica em minha tabela, e ficou perfeito! Muito Obrigado!!!

 

Abraços

 

André

Compartilhar este post


Link para o post
Compartilhar em outros sites

Wagner,

 

Agradeço a sua ajuda, porem fiz outros teste e ele consegue instroduzir dados caso eu mudei somente um dos dados por exemplo so o nome, e se eu mandter o mesmo nome de login, ele cadastra do mesmo jeito!

 

Oque poddo fazer nesse caso??? (Se um dos campos seja igual ao inserido ele nao cadastra, Se não ele cadastra todos os campos selecionados)

 

Abraços

 

EDITADO POIS CONSEGUI RESOLVER

 

Consegui resolver!!!

 

Simples, so mudar a ordem da decição!

 

mysql> delimiter //
mysql> create procedure sp_checa(v_nome char(80), v_login char(20), v_senha char(20))
	-> begin
	->  -- selecionamos para contar se existe um usuário com as informações
	->  -- passadas como parâmetro
	->  select funcio_nome, funcio_login, funcio_senha into @nome, @login, @senha
	->  from tbl_funcionario
	->  where funcio_nome =v_nome and funcio_login =v_login and funcio_senha =v_senha
	->  limit 1;
	->  -- condicional para checar se as variáveis do usuário tem valor != ''
	->  if ((@nome = '') && (@login = '') && (@senha = '')) then
	->	 insert into tbl_funcionario set funcio_nome =v_nome, funcio_login =v_login, funcio_senha =v_senha;
	->  else
	->  select 'Funcionário já cadastrado!'as Msg;
	->  end if;
	-> end;
	-> //
Query OK, 0 rows affected (0.00 sec)

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.