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

llamada a function

Estas en el tema de llamada a function en el foro de PostgreSQL en Foros del Web. Amigos les quiero pedir ayuda, soy un novato q quiere empezar a trabajar con Postgres, TE go el siguiente codigo como function: Código PHP: CREATE  ...
  #1 (permalink)  
Antiguo 16/03/2008, 18:25
 
Fecha de Ingreso: octubre-2005
Mensajes: 28
Antigüedad: 18 años, 5 meses
Puntos: 1
llamada a function

Amigos les quiero pedir ayuda, soy un novato q quiere empezar a trabajar con Postgres, TE go el siguiente codigo como function:

Código PHP:
CREATE OR REPLACE FUNCTION "public"."p_accesousuario" (v_usu_id charRETURNS varchar AS
$body$
BEGIN
  select 1 from sc_usuario
   where usu_id 
v_usu_id    
   
   if 
not found THEN
           
return "Valido";         
   else
           return 
"Invalido";
   
end if;  
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER
he intento llamarlo de la siguiente manera:

Código PHP:
select from p_accesousuario("carlos"); 
y el resultado de este es:

Código PHP:
ERROR:  column "carlos" does not exist at character 31 
les agradeceria su ayuda.
  #2 (permalink)  
Antiguo 16/03/2008, 23:34
 
Fecha de Ingreso: enero-2008
Mensajes: 25
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: llamada a function

Hola como andas.

El error se debe a que estas usando doble comillas para "Invalido" y "Valido".
Deberias usar comillas simples.

Por otra parte, espero que tengas claro que:

SELECT 1 FROM Tabla ...

no esta bien. Deberias usar atributos, a pesar que para lo que queres hacer funciona.

Salu2
  #3 (permalink)  
Antiguo 17/03/2008, 10:31
 
Fecha de Ingreso: octubre-2005
Mensajes: 28
Antigüedad: 18 años, 5 meses
Puntos: 1
Re: llamada a function

bransh;

Te agradezco tu respuesta, la verdad q hice los cambios y creo q avance en algo
pero ahora me despliega lo siguiente:

Código PHP:
ERROR:  query has no destination for result data
HINT
:  If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT:  PL/pgSQL function "p_accesousuario" line 2 at SQL statement 
y por lo que entiendo y veo en la funcion si estoy retornando un valor que es del tipo varchar.

De Antemano muchas gracias..
  #4 (permalink)  
Antiguo 17/03/2008, 10:56
 
Fecha de Ingreso: enero-2008
Mensajes: 25
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: llamada a function

Hola xtstgo, simplemente reemplaza SELECT por PERFORM como te dice en el mensaje.

No te lo adverti porque en mi caso el primer error que surgio fue ese y como no habias comentado sobre el mismo, pense que se podria deber a una version distinta que estemos usando.

Lo que dice el error es que deberias usar PERFORM y no SELECT cuando el resultado no tiene un destino. Por ejemplo si en vez de hacerla como la hiciste a la funcion, la realizaras con un:

Código:
    IF NOT EXISTS (SELECT ....) THEN
        RETURN 'Invalido';
    ELSE
        RETURN 'Valido'; 
    END IF;
en este caso, se utiliza el resultado de la consulta para evaluar la existencia o no de los datos buscados y si se puede usar efectivamente SELECT.



Salu2
  #5 (permalink)  
Antiguo 17/03/2008, 14:36
 
Fecha de Ingreso: octubre-2005
Mensajes: 28
Antigüedad: 18 años, 5 meses
Puntos: 1
Re: llamada a function

bransh;

ok te agradesco tu ayuda, me funciono cambie el IF que tenia por el codigo tuyo y segui utilizando el select * from ... y me trajo el dato q yo queria.

Una vez mas te lo agradezco.
Pero me parece que te voy a seguir molestando...jaja.

Gracias
Gerardo
  #6 (permalink)  
Antiguo 17/03/2008, 16:36
 
Fecha de Ingreso: enero-2008
Mensajes: 25
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: llamada a function

jaja... no hay problema, me alegro que te haya servido.

Salu2
  #7 (permalink)  
Antiguo 18/03/2008, 06:01
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Re: llamada a function

Buenas, viendo que empiezas un par de consejos:

Si vas a devolver valido/invalido deberias retornar un boolean.

Para lo que haces en la funcion no necesitas plpgsql, la "norma" no escrita dice que si se puede hacer con sql no se usa plpgsql (menos eficiente).

Salu2
  #8 (permalink)  
Antiguo 18/03/2008, 15:09
 
Fecha de Ingreso: octubre-2005
Mensajes: 28
Antigüedad: 18 años, 5 meses
Puntos: 1
De acuerdo Re: llamada a function

Se agradece tu consejo Seiko...
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 1 personas




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