postgresql - 使用 Array_append 在创建 PostgreSQL 函数时出现语法错误

标签 postgresql arrays

这是代码

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_textprimes 是一个数组,因此您需要 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/

相关文章:

sql - PostgreSQL 交叉表/数据透视问题

jquery - 选择逗号分隔字符串中可观察数组的所有字段值

c++ - 复制数组并清理

sql - 平面到多层嵌套数据

postgresql - ALTER TYPE ... ADD 无法在事务 block 内运行 - Entity Framework

sql - Postgresql UPDATE 基于先前 SELECT 的结果

sql - PostgreSQL 中不需要的换行符翻译

c# - 使用 Json.net 将非数组 JSON 对象解析为数组

c - C 中的拼写检查器

ios - 快速将对象添加到 nsmutablearray