2010-11-25 18 views
12

Estoy intentando conseguir esta función plpgsql a trabajar:función plpgsql vuelve mesa (..)

CREATE OR REPLACE FUNCTION outofdate(actualdate varchar) 
RETURNS TABLE(designacion varchar(255),timebeingrotten varchar(255)) 
AS $BODY$ 

SELECT designacao, actualdate - prazo 
FROM alimento 
WHERE prazo < actualdate; 
$BODY$ 
LANGUAGE 'plpgsql' volatile; 

SELECT * 
From outofdate('12/12/2012'); 

Me mantiene dando un error en la línea 2 - mesa ..

ERROR: syntax error at or near "TABLE" LINE 2: RETURNS TABLE(designacion varchar(255),timebeingrotten varch... ^

*** Error ***

ERROR: syntax error at or near "TABLE" SQL state: 42601 Character: 67

Respuesta

39

No estoy seguro, pero tal vez utilice una versión anterior de la página sin soporte de la sintaxis RETURNS TABLE. El siguiente problema en su ejemplo es la sintaxis incorrecta para el lenguaje PL/pgSQL; busque en el manual la sintaxis; cada función debe contener un bloque con BEGIN ... END. Los registros se pueden devolver a través de la declaración RETURN QUERY. Echa un vistazo a este tutorial.

CREATE OR REPLACE FUNCTION foo(a int) 
RETURNS TABLE(b int, c int) AS $$ 
BEGIN 
    RETURN QUERY SELECT i, i+1 FROM generate_series(1, a) g(i); 
END; 
$$ LANGUAGE plpgsql; 

Llamar:

SELECT * FROM foo(10);