声明自定义记录的 varray 并使用 Extend 方法(这会产生语法错误??)

Declaring a varray of custom records and using Extend method(which gives a syntax error??)

提问人:JPho 提问时间:8/22/2023 更新时间:8/28/2023 访问量:26

问:

因此,我正在开发一个调用函数的 View。在声明函数或视图之前,我定义了一个自定义复合记录。然后,我声明一个 vararray,类型为:my custom composite record。然后,在函数中,我定义了一个类型为:vararray的新变量。(我将在下面举例说明)。但是,当我尝试调用 newCustomArray.extends(1) 时,我收到语法错误。当我只是测试函数本身(没有视图)时,我没有收到错误。所以我有点困惑,对 edb postgres 的 plsql 也有点陌生。有人对我做错了什么有什么想法吗?代码如下:

CREATE TYPE public.Question AS
(
 "ID" integer,
 "QID" integer,
 "Order" integer,
 "IsNeeded" boolean,
 "FieldName" character varying(150),
 "OtherField" boolean
);

CREATE 类型 PUBLIC.INFOARRAY 是 PUBLIC 的 VARYING ARRAY(40)。问题;

......

(within function)
rec_anotherinfoarray public.infoarray := public.infoarray();

rec_anotherinfoarray.extend(1) --> causing all the syntax errors (SQL state 42601)
PostgreSQL PLSQL 扩展 VARRAY EDB

评论

0赞 Belayer 8/22/2023
Your 是一个 Oracle 定义,语句 'rec_anotherinfoarray.extend(1)' 也是如此。Postgres 没有/支持 varray,也没有 arrray 的扩展子句。CREATE TYPE...
0赞 JPho 8/22/2023
@Belayer但 edb postgres 确实有支持,但它在文档中:enterprisedb.com/docs/epas/latest/reference/...
0赞 Belayer 8/22/2023
我纠正了。很高兴知道。从未使用过后来的 EDB 版本并错过了标签。但这成为一个重要的部分,最好是具体指出与版本一起。

答:

0赞 Houssin Boulla 8/28/2023 #1

PostgreSQL 的 PL/pgSQL 语言不支持 VARRAY 类型。

在 PostgreSQL 中,VARRAY 是固定大小的数组,您不能像使用其他一些数据库系统中的集合那样使用 EXTEND 方法动态扩展或调整它们的大小。

如果想要一个可以动态扩展的集合,可以考虑改用 PL/pgSQL 数组。下面是如何修改代码的示例:

CREATE OR REPLACE FUNCTION your_function()
RETURNS void AS $$
DECLARE
    rec_anotherinfoarray public.infoarray[]; -- Use an array instead of VARRAY
BEGIN
    -- Initialize the array
    rec_anotherinfoarray := ARRAY[]::public.infoarray[];

    -- Extend the array
    rec_anotherinfoarray := array_append(rec_anotherinfoarray, public.infoarray(1, 2, 3, true, 'FieldName', true));

    -- You can continue to extend the array as needed

END;
$$ LANGUAGE plpgsql;