这是代码
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'
这是我开发主要生成函数的开始。我试图简单地让它返回'计数'数组。所以如果我通过' 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
我是postgres函数的新手。我不明白为什么我不能让这个阵列正常工作。
我想要的只是将这个阵列正确填充到当前的'数组的计数。 (更重要的是,只是帮助我理解它实际上是在正确地进行循环并正确计算它。)
感谢您的帮助。
答案 0 :(得分:15)
来自fine manual:
功能:
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';
我不知道您打算mycount := count(primes);
做什么,也许您打算说mycount := array_length(primes, 1);
,以便在primes
中获得一系列连续的整数。