- Kan PostgreSQL udføre en joinforbindelse mellem to ~procedurer, hvor kolonnerne ikke er kendt før runtime?
Det grundlæggende svar er enkelt, fordi der i øjeblikket ikke er nogen lagrede procedurer i Postgres (op til Postgres 10), kun funktioner - som giver næsten, men ikke helt den samme funktionalitet, som du har udstukket i spørgsmålet.
Og enhver funktion kan bruges i FROM
klausul af en SELECT
forespørgsel som enhver anden tabel.
Opdatering:
SQL-procedurer ("lagrede procedurer") introduceres med Postgres 11.
Manualen til CREATE PROCEDURE
.
SQL selv kræver at kende returtypen ved kørsel. Der er en grænse-case :du kan erklære returtypen med funktionskaldet ved at bruge polymorfe typer . Detaljerede instruktioner her (det sidste kapitel er mest relevant for dig):
- Refaktorer en PL/pgSQL-funktion for at returnere output fra forskellige SELECT-forespørgsler
- Kan det gøre det samme, undtagen at bruge lagrede procedurer, der findes i en ekstern tredjepartsdatabase (måske via udenlandske dataindpakninger eller en anden mekanisme)?
Det er et NEJ også baseret på samme princip. Hvis du bruger udenlandske tabeller, skal du angive en klart defineret returtype på den ene eller den anden måde.
Du måske være i stand til at samle hele rækken fra en SQL-Server-stored-procedure til en enkelt tabulator-separeret tekstrepræsentation, men så (udover at være fejltilbøjelig og ineffektiv) har du en enkelt kolonne og har brug for metainformationen, der definerer individuelle kolonner den ene eller den anden måde at udtrække kolonner - catch 22.