arrays - 如何在 PostgreSQL 中循环二维数组

标签 arrays postgresql

我正在尝试循环遍历二维数组,从每个获取第一个和第二个值来更新表格

CREATE OR REPLACE FUNCTION fc_update_arrangement(input_arrangementid int, input_NAME text, input_price money, input_expirationdate date, products int[][])
RETURNS void AS
$BODY$
BEGIN
update arrangement set "NAME" = $2, price = $3, expirationdate = $4 where arrangementid = $1;
-- loop through array getting the first and second value
-- update productinarrangement set amount = arrayinputnumber2 where productid = arrayinputnumber1 and arrangementid = $1
END;
$BODY$ LANGUAGE plpgsql STRICT;

在帮助下,我正确调用了函数,不再返回错误。我不明白如何循环遍历数组以获得其中的值?我已经注释掉了这些行,但我不知道该怎么办。我在这一行中调用该函数:

select fc_update_arrangement(1::int, 'tom'::text, 15::money, now()::date, array[ array[1,2], array[3,4] ]);

最佳答案

the documentation中有一个例子:

CREATE FUNCTION scan_rows(int[]) RETURNS void AS $$
DECLARE
  x int[];
BEGIN
  FOREACH x SLICE 1 IN ARRAY $1
  LOOP
    RAISE NOTICE 'row = %', x;
  END LOOP;
END;
$$ LANGUAGE plpgsql;

SELECT scan_rows(ARRAY[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]);

NOTICE:  row = {1,2,3}
NOTICE:  row = {4,5,6}
NOTICE:  row = {7,8,9}
NOTICE:  row = {10,11,12}

尝试口头描述:如果 whatever[] 类型的数组并使用 SLICE 1 循环,则该数组将被切成每个包含一个元素的切片。然后,循环变量将包含相同类型的数组 whatever[],每个数组包含原始数组的一个元素。如果您选择SLICE 2,则循环变量将包含大小为 2 的数组。

关于arrays - 如何在 PostgreSQL 中循环二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47672282/

相关文章:

sql - 如何在 PostgreSQL 中以日期格式本身添加 AM 或 PM?

java - Postgresql Java jdbc 通过 SSL 隧道连接到使用 .pem 文件在 Virtualbox 中运行的数据库

javascript - pg-promise - 错误运算符不存在 : bigint = bigint[]

sql - 如何从两列的值中选择 DISTINCT

javascript - 使用javascript更改带有对象的urlpath

javascript - 所有数组元素均未分配给模型

arrays - 如何使用 mongo shell 获取 MongoDB 集合中的所有字段名称,包括嵌套字段名称?

c - 如何从文件中读取大量的float?

python - 构建一个包含冒号的元组以用于索引 numpy 数组

django - PostgreSQL:使用远程服务器上同一表中的新记录更新表