2010-07-05 7 views
1

Je voudrais créer une fonction pour sélectionner et m'a changé les donnéesCréer une fonction avec un argument comme subselect

CREATE OR REPLACE FUNCTION PublicatedTask(argument) RETURNS SETOF task AS $$DECLARE 
    f task%ROWTYPE; 
    BEGIN 
    FOR f IN SELECT * FROM Task where layer IN $1 and publicationin<>0 ORDER BY id LOOP 
     if (f.publicationIN = 1) then 
    f.description=''; 
    end if;  
    RETURN NEXT f; 
    END LOOP; 
    RETURN; 
    END; 
    $$ 
LANGUAGE 'plpgsql'; 

mais je ne sais pas ce type d'argument?

Je voudrais faire SELECT * FROM PublicatedTask((1,2,3));

Merci pour votre aide

Répondre

1

Ou utilisez VARIADIC:

CREATE OR REPLACE FUNCTION PublicatedTask(VARIADIC argument int[]) RETURNS SETOF task AS $$DECLARE 
    f task%ROWTYPE; 
    BEGIN 
    FOR f IN SELECT * FROM Task where layer = ANY($1) and publicationin<>0 ORDER BY id LOOP 
     if (f.publicationIN = 1) then 
    f.description=''; 
    end if;  
    RETURN NEXT f; 
    END LOOP; 
    RETURN; 
    END; 
    $$ 
LANGUAGE 'plpgsql'; 

et de l'utiliser de cette façon:

SELECT * FROM PublicatedTask(1,2,3); 

VARIADIC est disponible à partir de la version 8.4: http://www.postgresql.org/docs/8.4/interactive/xfunc-sql.html#XFUNC-SQL-VARIADIC-FUNCTIONS

0

vous pouvez utiliser un tableau d'entiers comme paramètre:

CREATE OR REPLACE FUNCTION PublicatedTask(argument int[]) RETURNS SETOF task AS $$DECLARE 
    f task%ROWTYPE; 
    BEGIN 
    FOR f IN SELECT * FROM Task where layer = ANY($1) and publicationin<>0 ORDER BY id LOOP 
     if (f.publicationIN = 1) then 
    f.description=''; 
    end if;  
    RETURN NEXT f; 
    END LOOP; 
    RETURN; 
    END; 
    $$ 
LANGUAGE 'plpgsql'; 

Ensuite, vous pouvez l'appeler ainsi:

SELECT * FROM PublicatedTask('{1,2,3}'); 
+0

Merci vous match très – Torenaga

Questions connexes