假设我在Postgresql中创建了一个复合类型:
CREATE TYPE custom_type AS
(x integer
y integer);
我需要在函数中使用它作为数组:
...
DECLARE
customVar custom_type[];
BEGIN
....
我的问题是:如何访问custom_type的特定组件?
例如,我想(重新)为custom_type数组中的第三个元素指定'x'...
答案 0 :(得分:2)
假设:
SELECT ARRAY[(1,2),(3,4)]::custom_type[];
使用数组下标,然后按名称引用该字段。
regress=> SELECT (ARRAY[(1,2),(3,4)]::custom_type[])[1].x;
x
---
1
(1 row)
答案 1 :(得分:2)
postgres=> create type pt as (x int, y int); CREATE TYPE postgres=> create or replace function fx() returns void as $$ declare a pt[] = ARRAY[(10,20),(30,40)]; declare xx pt; begin for i in array_lower(a, 1) .. array_upper(a,1) loop xx = a[i]; xx.x := xx.x + 1; a[i] := xx; raise notice '%', a[i].x; end loop; end; $$ language plpgsql; CREATE FUNCTION postgres=> select fx(); NOTICE: 11 NOTICE: 31 fx ──── (1 row)
assign语句的目标的重要限制是可能仅引用一个级别的嵌套属性。辅助变量可以绕过这个限制 - 它不太友好 - 内部实现太简单了,但它对于典型的存储过程使用来说速度快且足够,尽管它与通用编程语言相比并不强大。