- Kann PostgreSQL einen Join zwischen zwei ~Prozeduren durchführen, bei denen die Spalten erst zur Laufzeit bekannt sind?
Die grundlegende Antwort ist einfach, weil derzeit keine gespeicherten Prozeduren vorhanden sind in Postgres (bis Postgres 10), nur Funktionen - die fast, aber nicht ganz die gleiche Funktionalität bieten, wie Sie in der Frage dargelegt haben.
Und jede Funktion kann im FROM
verwendet werden -Klausel eines SELECT
Abfrage wie jede andere Tabelle.
Update:
SQL-Prozeduren ("gespeicherte Prozeduren") werden mit Postgres 11 eingeführt.
Das Handbuch für CREATE PROCEDURE
.
SQL selbst verlangt zur Laufzeit, den Rückgabetyp zu kennen. Es liegt ein Grenzfall vor :Sie können den Rückgabetyp mit dem Funktionsaufruf unter Verwendung von polymorphen Typen deklarieren . Detaillierte Anweisungen hier (das letzte Kapitel ist für Sie am relevantesten):
- Refaktorisieren Sie eine PL/pgSQL-Funktion, um die Ausgabe verschiedener SELECT-Abfragen zurückzugeben
- Kann es dasselbe tun, außer dass gespeicherte Prozeduren verwendet werden, die sich in einer externen Datenbank eines Drittanbieters befinden (möglicherweise über fremde Datenwrapper oder einen anderen Mechanismus)?
Das ist ein NEIN auch nach dem gleichen Prinzip. Wenn Sie fremde Tabellen verwenden, müssen Sie so oder so einen klar definierten Rückgabetyp bereitstellen.
Du vielleicht in der Lage sein, die gesamte Zeile, die sich aus einer gespeicherten SQL-Server-Prozedur ergibt, in eine einzelne durch Tabulatoren getrennte Textdarstellung zusammenzufassen, aber dann haben Sie (abgesehen davon, dass es fehleranfällig und ineffizient ist) eine einzelne Spalte und benötigen die Metainformationen, die einzelne Spalten definieren die eine oder andere Möglichkeit, Spalten zu extrahieren - Fang 22.