如何在postgresql过程中为多维数组赋值



我想使用PostgreSQL将值动态分配到数组中。

到目前为止我所做的:-我已将_tmp_user_data声明为_tmp_user_data character varying[][];我已经在posgresqlcursor中编写了数组赋值

_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;

我得到了以下错误

错误:integer的输入语法无效:"user_name">

核心问题是Postgres数组只接受整数下标,而不接受字符串。

_tmp_user_data[_counter]['user_name']

像这样的东西可以工作:

_tmp_user_data[_counter][1]  -- _counter being an integer variable

从这里开始阅读手册。

没有数据type varying[][](尽管这种拼写是可以容忍的(。数据类型为character varying[](或varchar[](。Postgres数组对任意数量的维度使用相同的类型。参见:

  • 将字符串[][]与ngpsql一起使用

Postgres数组默认情况下是基于1的。手册:

默认情况下,PostgreSQL对数组使用基于一的编号约定,即n元素的数组以array[1]开始,以array[n]结束。

相关:

  • 规范一维数组的数组下标,使其以1开头

通常,您不需要显式游标来在PL/pgSQL中循环。参见:

  • 截断Postgres数据库中的所有表
  • Postgres9.0中使用PL/pgSQL的表循环+

通常情况下,有一个优越的解决方案,根本没有任何循环。。。

最新更新