Ir para conteúdo

POWERED BY:

Arquivado

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

Walter Aragão

Validação com Procedures

Recommended Posts

Olá pessoal , boa noite

estou começando a estudar procedures para implementar em um pequeno projeto.

Tenho a SP abaixo para inserir dados na tabela e precisava de algum tipo de validação para saber se um nome ja existe por exemplo.

 

segue ela :

CREATE PROCEDURE hd_Cadastra_Login
(IN nomeUsuario CHAR(40),
IN usuario CHAR(40),
IN senha CHAR(40),
IN permissao CHAR(40),
IN horaUltimoLogin TIME,
IN dataUltimoLogin DATE,
IN ativo INTEGER)
BEGIN
DECLARE situacao CHAR(1);
IF permissao = 1 THEN
SET situacao = 'S';
ELSE
SET situacao = 'N';
END IF;
INSERT INTO login (nome, usuario, senha, permissao, horaUltimoLogin, dataUltimoLogin, ativo)
VALUES(nomeUsuario, usuario,senha, permissao, horaUltimoLogin,dataUltimoLogin,situacao);
END//

 

como posso fazer essa vaerificação ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

CREATE PROCEDURE hd_Cadastra_Login
(IN nomeUsuario CHAR(40),
IN usuario CHAR(40),
IN senha CHAR(40),
IN permissao CHAR(40),
IN horaUltimoLogin TIME,
IN dataUltimoLogin DATE,
IN ativo INTEGER)
BEGIN
   DECLARE situacao CHAR(1);
   DECLARE vLoginJaExiste TINYINT(1); # Vamos Criar uma Variável para fazer essa verificação.

   IF permissao = 1 THEN
       SET situacao = 'S';
   ELSE
       SET situacao = 'N';
   END IF;

  # Agora Atribuir um valor a partir do Select
  SET vLoginJaExiste = (SELECT COUNT(*) FROM login WHERE nome = nomeUsuario)

  #Caso não tenha nenhum login repetido realizo o INSERT
  IF(vLoginJaExiste  = 0) THEN
     INSERT INTO login (nome, usuario, senha, permissao, horaUltimoLogin, dataUltimoLogin, ativo)
     VALUES(nomeUsuario, usuario,senha, permissao, horaUltimoLogin,dataUltimoLogin,situacao);
  END IF;
END $$

 

Obs. Você pode usar ainda o campo do login(usuario) com o índice único assim quando você tentasse realizar um INSERT de valor duplicado ele geraria um erro, porém mesmo assim é sempre bom fazer as devidas validações.

 

obs2. De uma olhada na diferença entre CHAR e VARCHAR pois pode gerar muita dor de cabeça no futuro

 

obs3. Você não precisaria de 2 campos em dataUltimoLogin DATE horaUltimoLogin TIME, tenha apena um campo dataHoraUltimoLogin DATETIME

 

obs4. Você recebe o parâmetro permissao como char(40) e o compara com o valor 1 INT, não vai gerar erro pois o MySQL vai corrigir sozinho, mais é mais um fator para toma cuidado.

 

Obs5. O MySQL não tem nada que diferencie nome de colunas e variáveis por isso é uma boa pratica criar um identificador para você no meu caso uso a letra v no começo das variáveis como pode ser visto no exemplo.

 

Obs6. A variável de entrada ativo nunca é usado na SP temos a coluna ativo da tabela login porem é atribuída a ela o valor de situação.

 

espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Duplicou ... Se puder apagem !!!

 

CREATE PROCEDURE hd_Cadastra_Login
(IN nomeUsuario CHAR(40),
IN usuario CHAR(40),
IN senha CHAR(40),
IN permissao CHAR(40),
IN horaUltimoLogin TIME,
IN dataUltimoLogin DATE,
IN ativo INTEGER)
BEGIN
   DECLARE situacao CHAR(1);
   DECLARE vLoginJaExiste TINYINT(1); # Vamos Criar uma Variável para fazer essa verificação.

   IF permissao = 1 THEN
       SET situacao = 'S';
   ELSE
       SET situacao = 'N';
   END IF;

  # Agora Atribuir um valor a partir do Select
  SET vLoginJaExiste = (SELECT COUNT(*) FROM login WHERE nome = nomeUsuario)

  #Caso não tenha nenhum login repetido realizo o INSERT
  IF(vLoginJaExiste  = 0) THEN
     INSERT INTO login (nome, usuario, senha, permissao, horaUltimoLogin, dataUltimoLogin, ativo)
     VALUES(nomeUsuario, usuario,senha, permissao, horaUltimoLogin,dataUltimoLogin,situacao);
  END IF;
END $$

 

Obs. Você pode usar ainda o campo do login(usuario) com o índice único assim quando você tentasse realizar um INSERT de valor duplicado ele geraria um erro, porém mesmo assim é sempre bom fazer as devidas validações.

 

obs2. De uma olhada na diferença entre CHAR e VARCHAR pois pode gerar muita dor de cabeça no futuro

 

obs3. Você não precisaria de 2 campos em dataUltimoLogin DATE horaUltimoLogin TIME, tenha apena um campo dataHoraUltimoLogin DATETIME

 

obs4. Você recebe o parâmetro permissao como char(40) e o compara com o valor 1 INT, não vai gerar erro pois o MySQL vai corrigir sozinho, mais é mais um fator para toma cuidado.

 

Obs5. O MySQL não tem nada que diferencie nome de colunas e variáveis por isso é uma boa pratica criar um identificador para você no meu caso uso a letra v no começo das variáveis como pode ser visto no exemplo.

 

Obs6. A variável de entrada ativo nunca é usado na SP temos a coluna ativo da tabela login porem é atribuída a ela o valor de situação.

 

espero ter ajudado.

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.