如何在postgresql过程中为多维数组赋值
Posted
技术标签:
【中文标题】如何在postgresql过程中为多维数组赋值【英文标题】:How to assign value to a multi dimensional array in postgresql procedure 【发布时间】:2020-04-16 09:53:46 【问题描述】:我想使用 PostgreSQL 将值动态分配到数组中。
到目前为止我做了什么:-
我已将_tmp_user_data
声明为_tmp_user_data character varying[][];
我已经在 posgresql cursor
_counter := 0;
open _user_data_cursor for execute _sql_user_data;
Loop
FETCH _user_data_cursor INTO _tmp_user_name, _tmp_crop_name;
If found Then
RAISE NOTICE '_tmp_crop_name name:%', _tmp_crop_name;
_tmp_user_data[_counter]['user_name'] := _tmp_user_name;
else
exit;
end if;
_counter := _counter + 1;
END LOOP;
CLOSE _user_data_cursor;
我收到以下错误
错误:整数的无效输入语法:“user_name”
【问题讨论】:
请提供一个完整的函数或过程,包括标题。并且始终是您的 Postgres 版本。 【参考方案1】:核心问题是Postgres数组只接受整数下标,不接受字符串。
<strike>_tmp_user_data[_counter]['user_name']</strike>
这样的事情可能会奏效:
_tmp_user_data[_counter][1] -- _counter being an integer variable
Start reading the manual here.
没有数据type varying[][]
(尽管可以容忍这种拼写)。数据类型为character varying[]
(或varchar[]
)。 Postgres 数组对任意数量的维度使用相同的 type。见:
Postgres 数组默认是从 1 开始的。 The manual:
默认情况下,PostgreSQL 对数组使用从一开始的编号约定,即
n
元素的数组以array[1]
开头并以 @987654334 结尾@n
]
.
相关:
Normalize array subscripts for 1-dimensional array so they start with 1通常,在 PL/pgSQL 中循环不需要显式游标。见:
Truncating all tables in a Postgres database Loop on tables with PL/pgSQL in Postgres 9.0+而且通常情况下,有一个完全没有任何循环的卓越解决方案......
【讨论】:
以上是关于如何在postgresql过程中为多维数组赋值的主要内容,如果未能解决你的问题,请参考以下文章