使用Array_append在创建PostgreSQL函数时给出了语法错误

Sta*_*anM 8 arrays postgresql

这是代码

CREATE OR REPLACE FUNCTION primes (IN   integer) RETURNS TEXT AS $$
DECLARE
    counter INTEGER = $1;
    primes int [];
    mycount int;
  BEGIN
    WHILE counter != 0 LOOP
      mycount := count(primes);
      array_append(primes [counter], mycount);
      counter := counter - 1;
    END LOOP;
    RETURN array_to_text(primes[], ',');
  END;
$$
LANGUAGE 'plpgsql'
Run Code Online (Sandbox Code Playgroud)

这是我开发主要生成函数的开始.我试图简单地让它返回数组的'count'.因此,如果我将"7"传递给函数,我应该回到[0,1,2,3,4,5,6].

但是当我尝试创建这个功能时,我得到了

SQL Error: ERROR:  syntax error at or near "array_append" LINE 1: array_append( $1  [ $2 ],  $3 )
        ^ QUERY:  array_append( $1  [ $2 ],  $3 ) CONTEXT:  SQL statement in PL/PgSQL function "primes" near line 8
Run Code Online (Sandbox Code Playgroud)

我是postgres函数的新手.我不明白为什么我不能让这个阵列正常工作.

我想要的只是用数组的'当前'计数正确填充这个数组.(更重要的是,只是帮助我理解它实际上是正确地进行循环并且正确计算它).

谢谢您的帮助.

mu *_*ort 18

精细手册:

功能:array_append(anyarray, anyelement)
返回类型:anyarray
说明:将元素追加到数组的末尾

所以array_append返回一个数组,你需要将返回值赋给某个​​东西.另外,我认为你想要array_to_string在你的功能结束时,而不是array_to_text.并且primes是一个数组,所以你想要array_append(primes, mycount)而不是试图追加到一个条目primes.

CREATE OR REPLACE FUNCTION primes (IN integer) RETURNS TEXT AS $$
DECLARE
    counter INTEGER = $1; 
    primes int []; 
    mycount int; 
BEGIN
    WHILE counter != 0 LOOP 
        mycount := count(primes); 
        primes  := array_append(primes, mycount);
        counter := counter - 1; 
    END LOOP;
    RETURN array_to_string(primes, ',');   
END;   
$$ LANGUAGE 'plpgsql';
Run Code Online (Sandbox Code Playgroud)

我不知道你打算mycount := count(primes);做什么,也许你想说的mycount := array_length(primes, 1);是你会得到一系列连续的整数primes.