- PostgreSQLは、実行時まで列がわからない2つの〜プロシージャ間の結合を実行できますか?
現在、ストアドプロシージャがないため、基本的な答えは簡単です。 Postgres(Postgres 10まで)では、関数だけが提供されます。これは、質問で説明したように、ほとんど同じ機能を提供しますが、まったく同じ機能を提供するわけではありません。
また、FROM
では任意の関数を使用できます SELECT
の句 他のテーブルと同じようにクエリします。
更新:
SQLプロシージャ(「ストアドプロシージャ」)はPostgres11で導入されました。CREATE PROCEDURE
のマニュアル 。
SQL自体は、実行時に戻り型を知ることを要求します。 ボーダーケースがあります :ポリモーフィックタイプを使用して、関数呼び出しでリターンタイプを宣言できます 。ここに詳細な手順があります(最後の章が最も関連性があります):
- PL / pgSQL関数をリファクタリングして、さまざまなSELECTクエリの出力を返します
- 外部のサードパーティデータベースに存在するストアドプロシージャを使用することを除いて、同じことを実行できますか(おそらく、外部データラッパーまたはその他のメカニズムを介して)?
それはいいえです 、また、同じ原則に基づいています。外部テーブルを使用する場合は、明確に定義されたリターンタイプをいずれかの方法で提供する必要があります。
あなたはかもしれない SQL-Serverのストアドプロシージャから得られた行全体を単一のタブ区切りのテキスト表現にまとめることができますが、(エラーが発生しやすく非効率的であることに加えて)単一の列があり、個々の列を定義するメタ情報が必要です列を抽出するいずれかの方法-キャッチ22。