複数のテーブルから作成したビューからすべての行をフェッチするのに数時間かかることがあります。複数のテーブルビューからカーソルを取得するPostgreSQL
Iは、それぞれ対応する2つのカスタム複合型二つのテーブル(位置、ベクトル)に、type_positionとtype_vector
位置(ID、SYS_TIME、緯度、経度)
を有しますベクトル(id、sys_time、speed)
plpgsqlプロシージャで一時的なVIEWを作成してすべてをまとめようとしています。
CREATE TEMP VIEW posAndVectView AS
SELECT * from position
UNION ALL
SELECT * from vector;
が、私は、このビューを反復処理する必要があり、いくつかの作業が位置に依存し、ベクトル属性を作っ:SYS_TIMEによる位置とベクトルと注文彼らはので、私は書いています。
が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セクションで何をする必要がありますされています
はので、私は、カーソルを使用すべきだと思いますか?
私はビューが実際にBEGINセクションで作成される前に、自分のビューに対応する型がDECLAREセクションで認識されていることを意味します。私はそれをテストします。 – Doremus
posAndVectViewとposAndVectView%ROWTYPEを使って、DECLAREセクションのposOrVect変数を宣言しようとしましたが、posAndVectView型が不明なので、ビューがまだ作成されていないためにエラーが発生することが予想されます。 – Doremus
あなたは正しいです。関数自体の内部で一時的なビューを作成することができませんでした。 'record'を使うことは良い解決策です。しかし、私が言及したように、私はあなたが本当にこれのためのビューを必要とは思わない。 –