我想使用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的表循环+
通常情况下,有一个优越的解决方案,根本没有任何循环。。。