2010-07-05 2 views
1

Я хотел бы создать функцию для выбора и изменил мне данныеСоздайте функцию с аргументом в качестве подвыборки

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'; 

, но я не знаю, что тип аргумента?

Я хотел бы сделать SELECT * FROM PublicatedTask((1,2,3));

Спасибо за вашу помощь

ответ

1

или использовать 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'; 

и использовать его таким образом:

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

VARIADIC доступна в версии 8.4: http://www.postgresql.org/docs/8.4/interactive/xfunc-sql.html#XFUNC-SQL-VARIADIC-FUNCTIONS

0

вы можете использовать массив целых чисел в качестве параметра:

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'; 

Тогда вы могли бы назвать это таким образом:

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

Спасибо Вам очень матч – Torenaga

 Смежные вопросы

  • Нет связанных вопросов^_^