我尝试使用几个小时来从一个视图中获取所有行,从多个表创建。
我有两个表(位置和矢量),分别对应两个自定义复合类型, type_position 和 type_vector
排名(id,sys_time,lat,lon)
向量(id,sys_time,speed)
我想在plpgsql程序中创建一个临时VIEW,将所有Position和Vector组合在一起并按sys_time排序,所以我写道:
CREATE TEMP VIEW posAndVectView AS
SELECT * from position
UNION ALL
SELECT * from vector;
我需要迭代这个视图并做一些工作取决于Position和Vector属性。
所以我认为我应该使用游标:
DECLARE
manyRows refcursor;
BEGIN
OPEN manyRows FOR
SELECT * FROM posAndVectView ORDER BY sys_time ASC;
LOOP
FETCH manyRows INTO posOrVect;
EXIT WHEN NOT FOUND;
...
END LOOP;
CLOSE manyRows;
所以我的问题是posOrVect变量的类型应该在DECLARE部分中?
它似乎有时是一个type_vector,有时候是一个type_position ......
答案 0 :(得分:1)
简单。类型应为posAndVectView
。
与任何其他表一样,还有一个与临时表同名的复合类型。
但你需要一个观点吗?您可以使用UNION
打开查询的光标。在这种情况下,您使用类型position
,因为它是第一个表格。
答案 1 :(得分:1)
我发现答案非常简单。 我需要使用PostgreSQL documentation中提到的记录类型来声明posOrVect变量:
记录变量与行类型变量类似,但它们没有 预定义结构。它们采用行的实际行结构 它们在SELECT或FOR命令期间分配。的子结构 记录变量每次分配时都可以更改。一个 这样做的结果是直到首次分配记录变量 to,它没有子结构,以及任何访问其中字段的尝试 将绘制运行时错误。