Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   PostgreSQL (http://www.forosdelweb.com/f99/)
-   -   llamada a function (http://www.forosdelweb.com/f99/llamada-function-566648/)

xtstgo 16/03/2008 18:25

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.

bransh 16/03/2008 23:34

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

xtstgo 17/03/2008 10:31

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..

bransh 17/03/2008 10:56

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

xtstgo 17/03/2008 14:36

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

bransh 17/03/2008 16:36

Re: llamada a function
 
jaja... no hay problema, me alegro que te haya servido.

Salu2

seyko 18/03/2008 06:01

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

xtstgo 18/03/2008 15:09

Re: llamada a function
 
Se agradece tu consejo Seiko... :aplauso:


La zona horaria es GMT -6. Ahora son las 07:13.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.