从多个表中获取游标视图PostgreSQL

时间:2017-06-07 15:01:35

标签: sql postgresql view cursor plpgsql

我尝试使用几个小时来从一个视图中获取所有行,从多个表创建。

我有两个表(位置和矢量),分别对应两个自定义复合类型, 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 ......

2 个答案:

答案 0 :(得分:1)

简单。类型应为posAndVectView

与任何其他表一样,还有一个与临时表同名的复合类型。

但你需要一个观点吗?您可以使用UNION打开查询的光标。在这种情况下,您使用类型position,因为它是第一个表格。

答案 1 :(得分:1)

我发现答案非常简单。 我需要使用PostgreSQL documentation中提到的记录类型来声明posOrVect变量:

  

记录变量与行类型变量类似,但它们没有   预定义结构。它们采用行的实际行结构   它们在SELECT或FOR命令期间分配。的子结构   记录变量每次分配时都可以更改。一个   这样做的结果是直到首次分配记录变量   to,它没有子结构,以及任何访问其中字段的尝试   将绘制运行时错误。