Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从多个表中提取游标查看PostgreSQL_Sql_Postgresql_View_Cursor_Plpgsql - Fatal编程技术网

从多个表中提取游标查看PostgreSQL

从多个表中提取游标查看PostgreSQL,sql,postgresql,view,cursor,plpgsql,Sql,Postgresql,View,Cursor,Plpgsql,我一直试着从一个视图中获取所有的行,该视图是从多个表中创建的 我有两个表(位置和向量),分别对应两个自定义组合类型,type\u Position和type\u Vector 位置(id、系统时间、纬度、经度) 矢量(id、系统时间、速度) 我想在plpgsql过程中创建一个临时视图,以汇集所有位置和向量,并按sys_时间对它们进行排序,因此我写道: CREATE TEMP VIEW posAndVectView AS SELECT * from posi

我一直试着从一个视图中获取所有的行,该视图是从多个表中创建的

我有两个表(位置和向量),分别对应两个自定义组合类型,type\u Positiontype\u Vector

位置(id、系统时间、纬度、经度)

矢量(id、系统时间、速度)

我想在plpgsql过程中创建一个临时视图,以汇集所有位置和向量,并按sys_时间对它们进行排序,因此我写道:

CREATE TEMP VIEW posAndVectView AS
                    SELECT * from position
                    UNION ALL
                    SELECT * from 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; 
所以我的问题是,在DECLARE部分,posOrVect变量的类型应该是什么?


它似乎有时是一个类型向量,有时是一个类型位置…

简单。类型应为
posAndVectView

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


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

很简单。类型应为
posAndVectView

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


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

我发现答案非常简单。 我需要声明posOrVect变量,其类型为PostgreSQL中提到的record

记录变量类似于行类型变量,但它们没有 预定义结构。它们采用行的实际行结构 它们是在“选择”或“用于”命令期间指定的。子结构 记录变量可以在每次分配时更改。A. 其结果是,在首次分配记录变量之前 到,它没有子结构,也没有任何试图访问其中某个字段的尝试 将绘制运行时错误


我发现答案很简单。 我需要声明posOrVect变量,其类型为PostgreSQL中提到的record

记录变量类似于行类型变量,但它们没有 预定义结构。它们采用行的实际行结构 它们是在“选择”或“用于”命令期间指定的。子结构 记录变量可以在每次分配时更改。A. 其结果是,在首次分配记录变量之前 到,它没有子结构,也没有任何试图访问其中某个字段的尝试 将绘制运行时错误


我在过程主体中创建了视图,因此如果您是对的,这意味着在开始部分中实际创建我的视图之前,与我的视图对应的类型在DECLARE部分中已知?我将对此进行测试。我尝试使用posAndVectView和posAndVectView%ROWTYPE在DECLARE节中声明posOrVect变量,但正如我所料,我出现了一个错误,因为视图尚未创建,因此posAndVectView类型未知。你是对的。我没有注意到您在函数本身内部创建了临时视图。使用
记录
是一个很好的解决方案。但是,正如我所提到的,我不认为你真的需要一个视图。我在过程的主体中创建了视图,所以如果你是对的,这意味着与我的视图相对应的类型在DECLARE部分中已知,而在BEGIN部分中实际创建了我的视图?我将对此进行测试。我尝试使用posAndVectView和posAndVectView%ROWTYPE在DECLARE节中声明posOrVect变量,但正如我所料,我出现了一个错误,因为视图尚未创建,因此posAndVectView类型未知。你是对的。我没有注意到您在函数本身内部创建了临时视图。使用
记录
是一个很好的解决方案。但正如我提到的,我不认为你真的需要一个视图。