如何在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。见:

Use string[][] with ngpsql

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过程中为多维数组赋值的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中为多维特征矩阵赋值?

如何从 php mysql 查询中为 jQuery 自动完成准备多维数组?

如何将哈希表添加到多维数组?无法通过成员枚举赋值

matlab如何创建多维数组

如何使用JPA持久化多维Java数组?

Java 多维数组 三维数组 初始化 赋值 打印