这是代码
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 函数的新手。我不明白为什么我不能让这个数组正常工作。
同样,我想要的只是用数组的“当前”计数正确填充此数组。 (更多的只是帮助我理解它实际上正在正确地执行循环并且正在正确地计算它)。
感谢您的帮助。
最佳答案
来自fine manual :
Function:
array_append(anyarray, anyelement)
Return Type:anyarray
Description: append an element to the end of an array
因此 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
中的连续整数序列。
关于postgresql - 使用 Array_append 在创建 PostgreSQL 函数时出现语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9680065/