“lackst”或其附近的语法错误

时间:2016-02-08 13:00:35

标签: postgresql

此请求:

unnest('{1,2}'::int[]);

给了我这个错误:

  语法错误处于“不需要的”或其附近

unnest('{1,2}');无效

为什么?

intire:

CREATE OR REPLACE FUNCTION result() RETURNS setof  users  AS
            $$
            DECLARE

            BEGIN
            unnest('{1,2}'::int[]);

RETURN QUERY SELECT * FROM   users;
            END;
            $$ LANGUAGE plpgsql;
            SELECT result();

修改 核心理念:

使用存储在列中的bigint []进行检索和操作。 所以,我有这个:

SELECT * FROM users WHERE email = email_ LIMIT 1 INTO usr;

然后,usr.chain包含一些bigint[]数据。例如,{1,2,3,4,5,6,7,8,9,10}。我想只保存最后的4个。

如何检索{7,8,9,10}{1,2,3,4,5,6}并迭代这些数组?

我只发现解决方案是使用SELECT FROM unnest(usr.chain) AS x ORDER BY x ASC LIMIT (sdl - mdl) OFFSET mchain等等。但是unnest函数给了我这个愚蠢的错误。我真的不明白为什么会这样。它在我在问题开头写的简单案例中不起作用。 subarray函数无效,因为数据类型为bigint[]而非int[]

此外,代码unnest(ARRAY[1,2])给了我同样的错误。 http://www.postgresql.org/docs/9.2/static/functions-array.html array_append函数

的错误相同

1 个答案:

答案 0 :(得分:1)

迭代数组:

CREATE OR REPLACE FUNCTION someresult(somearr bigint[] ) RETURNS setof     bigint  AS
$$
DECLARE
  i integer;
  x bigint;
BEGIN

for x in select unnest($1)
   loop
-- do something
   return next x;
   end loop;
 --  or 

FOR i IN array_lower($1, 1) .. array_upper($1, 1) 
    LOOP  
    -- do something like:
    return next ($1)[i];
    end loop;

 END;
$$ LANGUAGE plpgsql;

select someresult('{1,2,3,4}') ;

array_append ....

CREATE OR REPLACE FUNCTION someresult2(somearr bigint[],val bigint ) RETURNS  bigint[]  AS
$$
DECLARE
  somenew_arr bigint[];
BEGIN
somenew_arr = array_append($1, $2 );
return somenew_arr;
 END;
$$ LANGUAGE plpgsql;
select someresult2('{1,2,3,4}' ,222) ;

所以,这里有基本的例子如何迭代和追加数组。现在,您可以一步一步地写下您想要做的事情,实现目标。