Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

validar login

Estas en el tema de validar login en el foro de Oracle en Foros del Web. Hola. Como puedo validar un login en un procedimiento almacenado? hasta ahora tengo algo asi: Código PHP: CREATE  OR  REPLACE PACKAGE BODY validarLogin IS PROCEDURE validar  (    usuario_in USUARIOS . ...
  #1 (permalink)  
Antiguo 10/01/2008, 01:13
 
Fecha de Ingreso: enero-2008
Mensajes: 15
Antigüedad: 16 años, 2 meses
Puntos: 0
validar login

Hola.

Como puedo validar un login en un procedimiento almacenado? hasta ahora tengo algo asi:

Código PHP:
CREATE OR REPLACE PACKAGE BODY validarLogin IS

PROCEDURE validar 
(
  
usuario_in USUARIOS.USUARIO%type,
  
clave_in USUARIOS.CLAVE%type,
  
validacion OUT NUMBER
IS
clave_check USUARIOS
.CLAVE%type :='VACIO';
BEGIN

 SELECT CLAVE INTO clave_check
 FROM USUARIOS
 WHERE USUARIO IN 
(usuario_in);

 IF (
clave_check=clave_inTHEN
  validacion
:=1;
 ELSE
  
validacion:=0;
 
END IF;

EXCEPTION
  WHEN OTHERS THEN
  RAISE_APPLICATION_ERROR
(-20001,'Datos Incorrectos');

END validar;

END validarLogin;

pero al recuperarlo en un servlet me tira el error feo ese de sql (SQLException: ORA-20001: Datos Incorrectos ORA-06512: en "VALIDARLOGIN", línea 23 ORA-06512: en línea 1 ) cuando en la tabla no existen los valores ingresados.

Como puedo hacer que no salga ese error y tratar de capturarlo en java y hacer algo mas bonito en le servlet?

Saludos!

Última edición por Yecco; 10/01/2008 a las 01:20
  #2 (permalink)  
Antiguo 10/01/2008, 05:04
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Re: validar login

Hola,

Las dos excepciones mas comunes para manejar errores en un SELECT INTO son

Código:
when no_data_found then
--el mensaje que quieras, no existe el usuario

when too_many_rows then
--el mensaje que quieras, existe mas de un usuario con el mismo usuario_in
Algunos comentarios,

1. Talvez quieras cambiar esta linea

Código:
WHERE USUARIO IN (usuario_in);
por esta

Código:
WHERE USUARIO = usuario_in;
2. Considera utilizar el paquete DBMS_OBFUSCATION_TOOLKIT para encriptar las constraseñas en la tabla de usuarios.

Saludos
  #3 (permalink)  
Antiguo 11/01/2008, 00:22
 
Fecha de Ingreso: enero-2008
Mensajes: 15
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: validar login

muchas gracias por la respuesta, ya lo solucione.

Ahora tengo otro problema. Los datos de la tabla estan en minusculas, y cuando los comparo con el mismo string pero mayusculas no me los acepta como iguales. Se supone que pl/sql no es case sensitive, o si?
  #4 (permalink)  
Antiguo 11/01/2008, 04:45
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 9 meses
Puntos: 43
Re: validar login

El pl-sql no, pero los strings si.

Esto 'CACHARRO' no es lo mismo que 'cacharro' ni en el ni en VB ni en C ni en nada
  #5 (permalink)  
Antiguo 11/01/2008, 07:04
 
Fecha de Ingreso: enero-2008
Mensajes: 15
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: validar login

trate de hacer esto:

Código PHP:
CREATE OR REPLACE PACKAGE BODY validarLogin IS

PROCEDURE validar 
(
  
usuario_in USUARIOS.USUARIO%type,
  
clave_in USUARIOS.CLAVE%type,
  
validacion OUT NUMBER
IS
clave_check USUARIOS
.CLAVE%type :='VACIO';
BEGIN

 SELECT CLAVE INTO clave_check
 FROM USUARIOS
 WHERE upper
(USUARIO) = upper(usuario_in);

 IF (
upper(clave_check)=upper(clave_in)) THEN
  validacion
:=1;
 ELSE
  
validacion:=0;
 
END IF;

END validar;

END validarLogin
pero ahora no me funciona ni en mayus ni minusculas
  #6 (permalink)  
Antiguo 11/01/2008, 13:56
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 9 meses
Puntos: 43
Re: validar login

Igual tienes algun blanco por ahí.

Prueba esto IF (trim(upper(clave_check))=trim(upper(clave_in)) )
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:04.