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

Funcion para verificar acceso de usuario

Estas en el tema de Funcion para verificar acceso de usuario en el foro de PostgreSQL en Foros del Web. Buenas gente.. Necesito hacer una funcion en Pl/pgsql y de verdad soy bien nuevo en esto... hasta ahora esto es lo q tengo de codigo: ...
  #1 (permalink)  
Antiguo 18/05/2011, 13:58
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
Exclamación Funcion para verificar acceso de usuario

Buenas gente..

Necesito hacer una funcion en Pl/pgsql y de verdad soy bien nuevo en esto...

hasta ahora esto es lo q tengo de codigo:

Código SQL:
Ver original
  1. CREATE FUNCTION f_verificar_acceso(CHARACTER VARYING, CHARACTER VARYING)
  2.         RETURNS CHARACTER VARYING AS
  3.     $BODY$
  4.     DECLARE
  5.     resultado CHARACTER VARYING;
  6.     BEGIN
  7.         SELECT nom_usu, pas_usu FROM usuarios WHERE nom_usu = 'character varying' AND pas_usu = 'character varying'
  8.     RETURN resultado;
  9.     END;
  10.     $BODY$
  11.         LANGUAGE 'plpgsql' VOLATILE;
  12.     ALTER FUNCTION f_verificar_acceso(CHARACTER VARYING, CHARACTER VARYING) OWNER TO hpartidas;

que me falta? tengo que verificar que exista el usuario en base de datos, si es asi retorna 0, en caso contrario retorna 1... por ejemplo.

Gracias anticipadas...

P.D.: estoy claro que la funcion esta patetica.. pero de verdad recien empiezo con este lenguaje.. sin embargo cuento con su ayuda para seguir avanzando!
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #2 (permalink)  
Antiguo 18/05/2011, 14:10
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Funcion para verificar acceso de usuario

Los parámetros se crean como $1, $2, ...

Luego en vez de devolver una cadena, devuelve un booleano diciendo si puede acceder o no.

Para saber si una sentencia sql ha tenido exito puede utilizar la variable FOUND que te indica con true si ha habido mínimo un resultado o false en caso contrario (tienes que utilizar el SELECT ... INTO, que asigna el primer resultado de la consulta a la variable).

Código SQL:
Ver original
  1. CREATE FUNCTION f_verificar_acceso(CHARACTER VARYING, CHARACTER VARYING)
  2.  RETURNS BOOLEAN AS
  3.  $BODY$
  4.     DECLARE
  5.    resultado CHARACTER VARYING;
  6.  
  7.  BEGIN
  8.  SELECT nom_usu INTO resultado FROM usuarios WHERE nom_usu = $1 pas_usu = $2
  9.  IF FOUND THEN
  10.      RETURN TRUE;
  11.    ELSE RETURN FALSE;
  12. END IF;
  13.  
  14.  END;
  15.  $BODY$
  16.  LANGUAGE 'plpgsql' VOLATILE;
  17.  ALTER FUNCTION f_verificar_acceso(CHARACTER VARYING, CHARACTER VARYING) OWNER TO hpartidas;

Hay más información en la documentación oficial de Postgres.
  #3 (permalink)  
Antiguo 18/05/2011, 14:14
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
De acuerdo Respuesta: Funcion para verificar acceso de usuario

oye alexg88 muchisimas gracias por responder amigo!

por lo que veo no estaba tan perdido como creia... voy a ver ahora como puedo probar el codigo..

nuevamente muchas gracias! :arriba
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #4 (permalink)  
Antiguo 18/05/2011, 14:17
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Funcion para verificar acceso de usuario

Me he comido un AND en la consulta:

Código SQL:
Ver original
  1. CREATE FUNCTION f_verificar_acceso(CHARACTER VARYING, CHARACTER VARYING)
  2.  RETURNS BOOLEAN AS
  3.  $BODY$
  4.     DECLARE
  5.    resultado CHARACTER VARYING;
  6.  
  7.  BEGIN
  8.  SELECT nom_usu INTO resultado FROM usuarios WHERE nom_usu = $1 AND pas_usu = $2
  9.  IF FOUND THEN
  10.      RETURN TRUE;
  11.    ELSE RETURN FALSE;
  12. END IF;
  13.  
  14.  END;
  15.  $BODY$
  16.  LANGUAGE 'plpgsql' VOLATILE;
  17.  ALTER FUNCTION f_verificar_acceso(CHARACTER VARYING, CHARACTER VARYING) OWNER TO hpartidas;
  #5 (permalink)  
Antiguo 18/05/2011, 14:20
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
Pregunta Respuesta: Funcion para verificar acceso de usuario

ok, ya lo tome en cuenta.. alexg88, como hago para llamar esta funcion?

gracias y disculpame, pero de verdad estoy ultra-nuevo en este lenguaje...
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #6 (permalink)  
Antiguo 18/05/2011, 14:22
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
Exclamación Respuesta: Funcion para verificar acceso de usuario

oye, probandolo en el pgAdmin III me arroja este error...


ERROR: syntax error at or near "IF"
LINE 1: ... usuarios WHERE nom_usu = $1 AND pas_usu = $2 IF $3 TH...
^
QUERY: SELECT nom_usu FROM usuarios WHERE nom_usu = $1 AND pas_usu = $2 IF $3 THEN RETURN true
CONTEXT: SQL statement in PL/PgSQL function "f_verificar_acceso" near line 7

********** Error **********

ERROR: syntax error at or near "IF"
SQL state: 42601
Context: SQL statement in PL/PgSQL function "f_verificar_acceso" near line 7


No sera que falta un ; al final del SELECT?? se lo agregue y funciona...
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #7 (permalink)  
Antiguo 18/05/2011, 14:32
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
Respuesta: Funcion para verificar acceso de usuario

leyendo un poco y en vista de que necesito que devuelva 0 para false y 1 para true.. modifique la funcion un poco..

Código SQL:
Ver original
  1. CREATE FUNCTION f_verificar_acceso(CHARACTER VARYING, CHARACTER VARYING, OUT respuesta INTEGER)
  2.     RETURNS INTEGER AS
  3.     $BODY$
  4.    
  5.     BEGIN
  6.         SELECT nom_usu FROM usuarios WHERE nom_usu = $1 AND pas_usu = $2;
  7.     IF FOUND THEN
  8.         respuesta = 1;
  9.     ELSE
  10.         respuesta = 0;
  11.     END IF;
  12.  
  13.     END;
  14.     $BODY$
  15.     LANGUAGE 'plpgsql' VOLATILE;
  16.     ALTER FUNCTION f_verificar_acceso(CHARACTER VARYING, CHARACTER VARYING) OWNER TO hpartidas;
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!

Última edición por Heiroon; 18/05/2011 a las 14:38

Etiquetas: function, plpgsql
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 16:43.