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

Pl/Pgsql Funcion que consulta y devuelve array

Estas en el tema de Pl/Pgsql Funcion que consulta y devuelve array en el foro de PostgreSQL en Foros del Web. Buenas amigos, estoy construyendo una funcion que al recibir un correo, verifica si esta en bd, de ser asi y debe devolverme un arreglo con ...
  #1 (permalink)  
Antiguo 22/07/2011, 12:18
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 Pl/Pgsql Funcion que consulta y devuelve array

Buenas amigos,

estoy construyendo una funcion que al recibir un correo, verifica si esta en bd, de ser asi y debe devolverme un arreglo con id, nombre y apellido...

Código SQL:
Ver original
  1. -- Function: f_cambiar_clave(integer, character varying)
  2.  
  3. -- DROP FUNCTION f_cambiar_clave(integer, character varying);
  4.  
  5. CREATE OR REPLACE FUNCTION f_existe_usuario(_email CHARACTER VARYING)
  6.   RETURNS VARCHAR AS
  7. $BODY$
  8. DECLARE
  9.    
  10.  
  11. BEGIN
  12.     -- Se verifica la existencia de un usuario registrado con el id
  13.     SELECT id_usu, nom_usu, ape_usu INTO _id FROM usuarios WHERE ema_usu = _email;
  14.  
  15.     IF FOUND THEN
  16.  
  17.         RETURN _id;
  18.     ELSE
  19.  
  20.         RETURN 0;
  21.     END IF;
  22. END;
  23. $BODY$
  24.   LANGUAGE plpgsql VOLATILE
  25.   COST 100;
  26. ALTER FUNCTION f_existe_usuario(CHARACTER VARYING) OWNER TO u_enelmapa;
  27. GRANT EXECUTE ON FUNCTION f_existe_usuario(CHARACTER VARYING) TO public;
  28. GRANT EXECUTE ON FUNCTION f_existe_usuario(CHARACTER VARYING) TO u_enelmapa;
  29. GRANT EXECUTE ON FUNCTION f_existe_usuario(CHARACTER VARYING) TO g_enelmapa WITH GRANT OPTION;
  30. COMMENT ON FUNCTION f_existe_usuario(CHARACTER VARYING) IS '
  31. NOMBRE: f_existe_usuario
  32. TIPO: Function (edition procedure)
  33. PARAMETROS:
  34.     1:  email del usuario
  35.    
  36. DESCRIPCION:
  37.     Verifica que existe el usuario a partir del correo electronico.
  38. RETORNO:
  39.     _id: Operación exitosa
  40.     0: No existe el usuario
  41.    
  42. EJEMPLO DE LLAMADA:
  43.     SELECT f_existe_usuario("[email protected]")
  44.                                    
  45. AUTOR: 
  46. FECHA DE CREACION: 22 de julio de 2011
  47. ';

Asi voy... que me falta?? ayuda por favor!!!


P.D.: Si hay una forma mas sencilla de hacer lo que quiero por favor diganme... Gracias!
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #2 (permalink)  
Antiguo 22/07/2011, 21:20
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Pl/Pgsql Funcion que consulta y devuelve array

no veo _id declarado.
Ni como array ni como ningun tipo de dato.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 25/07/2011, 10:26
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 18 años, 7 meses
Puntos: 7
Respuesta: Pl/Pgsql Funcion que consulta y devuelve array

Te falta... preguntar qué cosa le pasa a tu función? tal y como lo pones, no dices sí te falla, si te funciona, si te... nada, no dices nada
__________________
Gracias de todas todas
-----
Linux!
  #4 (permalink)  
Antiguo 01/08/2011, 12:39
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: Pl/Pgsql Funcion que consulta y devuelve array

Hola,

al final lo resolvi de esta manera... La comparto por si algun dia hace falta..

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION f_existe_usuario(_email CHARACTER VARYING)
  2.   RETURNS SETOF t_datos_recup_clave AS
  3. $BODY$
  4. DECLARE
  5.     _cod_msj    INTEGER;
  6.     _msj_usu    VARCHAR;
  7.     _reg_usuario    RECORD;
  8.     _retorno    t_datos_recup_clave;
  9. BEGIN
  10.    
  11.     SELECT
  12.         id_usu,
  13.         nom_usu,
  14.         ape_usu
  15.     INTO
  16.         _reg_usuario
  17.     FROM
  18.         usuarios
  19.     WHERE
  20.         ema_usu = _email;
  21.        
  22.     IF NOT FOUND THEN
  23.  
  24.         _cod_msj            := 1;
  25.         _msj_usu            := 'No Existe el Usuario';
  26.         _retorno.cod_msj        := _cod_msj;
  27.         _retorno.msj_usu        := _msj_usu;
  28.     ELSE
  29.         _cod_msj            := 0;
  30.         _msj_usu            := 'El usuario ha sido encontrado';
  31.         _retorno.cod_msj        := _cod_msj;
  32.         _retorno.msj_usu        := _msj_usu;
  33.         _retorno.id_usu         := _reg_usuario.id_usu;
  34.         _retorno.nom_usu        := _reg_usuario.nom_usu;
  35.         _retorno.ape_usu        := _reg_usuario.ape_usu;
  36.  
  37.     END IF;
  38.    
  39.     RETURN NEXT _retorno;
  40.     RETURN;
  41. END;
  42. $BODY$
  43.   LANGUAGE plpgsql VOLATILE
  44.   COST 100
  45.   ROWS 1000;
  46. ALTER FUNCTION f_existe_usuario(CHARACTER VARYING) OWNER TO u_enelmapa;
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #5 (permalink)  
Antiguo 09/02/2012, 12:00
Avatar de djmashe  
Fecha de Ingreso: julio-2007
Ubicación: Posadas, Misiones
Mensajes: 52
Antigüedad: 16 años, 9 meses
Puntos: 2
Pregunta Respuesta: Pl/Pgsql Funcion que consulta y devuelve array

Cita:
Iniciado por Heiroon Ver Mensaje
Hola,

al final lo resolvi de esta manera... La comparto por si algun dia hace falta..

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION f_existe_usuario(_email CHARACTER VARYING)
  2.   RETURNS SETOF t_datos_recup_clave AS
  3. $BODY$
  4. DECLARE
  5.     _cod_msj    INTEGER;
  6.     _msj_usu    VARCHAR;
  7.     _reg_usuario    RECORD;
  8.     _retorno    t_datos_recup_clave;
  9. BEGIN
  10.    
  11.     SELECT
  12.         id_usu,
  13.         nom_usu,
  14.         ape_usu
  15.     INTO
  16.         _reg_usuario
  17.     FROM
  18.         usuarios
  19.     WHERE
  20.         ema_usu = _email;
  21.        
  22.     IF NOT FOUND THEN
  23.  
  24.         _cod_msj            := 1;
  25.         _msj_usu            := 'No Existe el Usuario';
  26.         _retorno.cod_msj        := _cod_msj;
  27.         _retorno.msj_usu        := _msj_usu;
  28.     ELSE
  29.         _cod_msj            := 0;
  30.         _msj_usu            := 'El usuario ha sido encontrado';
  31.         _retorno.cod_msj        := _cod_msj;
  32.         _retorno.msj_usu        := _msj_usu;
  33.         _retorno.id_usu         := _reg_usuario.id_usu;
  34.         _retorno.nom_usu        := _reg_usuario.nom_usu;
  35.         _retorno.ape_usu        := _reg_usuario.ape_usu;
  36.  
  37.     END IF;
  38.    
  39.     RETURN NEXT _retorno;
  40.     RETURN;
  41. END;
  42. $BODY$
  43.   LANGUAGE plpgsql VOLATILE
  44.   COST 100
  45.   ROWS 1000;
  46. ALTER FUNCTION f_existe_usuario(CHARACTER VARYING) OWNER TO u_enelmapa;
Saludos heiroon, te consulto, la variable t_datos_recup_clave es un tipo definido por vos? porque si ejecuto este script como lo posteaste me da el siguiente error:

Código sql:
Ver original
  1. ERROR:  TYPE "t_datos_recup_clave" does NOT exist
  2.  
  3. ********** Error **********
  4.  
  5. ERROR: TYPE "t_datos_recup_clave" does NOT exist
  6. Estado SQL:42704

Etiquetas: devuelve, funcion, sql
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

SíEste tema le ha gustado a 3 personas




La zona horaria es GMT -6. Ahora son las 17:26.