提问人:JPho 提问时间:8/22/2023 更新时间:8/28/2023 访问量:26
声明自定义记录的 varray 并使用 Extend 方法(这会产生语法错误??)
Declaring a varray of custom records and using Extend method(which gives a syntax error??)
问:
因此,我正在开发一个调用函数的 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)
答:
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;
评论
CREATE TYPE...