我想在 PL/pgSQL 中创建二维数组。
我找到了这样的例子: myarray1 INT[2][2]:=array[[NULL,NULL],[NULL,NULL]];
但在我的例子中,当我创建表时我不知道表的数组,因为数据是从选择查询中读取的。我如何声明动态数组?
我换个方式问。 在 Oracle 中我可以声明:
CREATE OR REPLACE TYPE MY_TYPE AS OBJECT
(
var1 VARCHAR(20),
...
)
...
这对应RECORD是plpsql。
然后在 Oracle 中我可以声明
CREATE OR REPLACE TYPE MY_TYPE_MY_TYPES IS
table of MY_TYPE;
所以我可以将选择查询的结果存储在类型的类型中,这只是二维表。而且我不必知道选择查询返回的行数。
我如何在 plpsql 中完成此操作?
谢谢
最佳答案
在 PostgreSQL 中,所有类型(包括用户定义的类型)都有各自的数组类型。
所以如果你声明了一个复合类型,你也会有一个数组类型。您可以在此处找到有关复合类型的信息:https://www.postgresql.org/docs/current/static/rowtypes.html
举个例子:
1) 创建一个新的复合类型
CREATE TYPE "myType" AS ( "id" INT, "name" VARCHAR );
2) 演示数组表示。结果的类型是“myType”[]
SELECT
ARRAY_AGG( v::"myType" ) AS v
FROM
( VALUES ( 1, 'a' ), ( 2, 'b' ), ( 3, 'c' ), ( 4, 'd' ) ) AS v
result is: {"(1,a)","(2,b)","(3,c)","(4,d)"}
3) 取消嵌套“myType”[] 数组并作为记录返回
SELECT ( UNNEST( '{"(1,a)","(2,b)","(3,c)","(4,d)"}'::"myType"[] ) ).*
result is:
id | name
---|-----
1 | a
2 | b
3 | c
4 | d
关于sql - PL/pgSQL 中的动态多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5517418/