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

谢谢你的帮助

4

2 回答 2

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

于 2010-07-06T06:04:56.870 回答
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}');
于 2010-07-05T17:53:32.157 回答