- Kan PostgreSQL utföra en koppling mellan två ~procedurer där kolumnerna inte är kända förrän vid körning?
Det grundläggande svaret är enkelt eftersom det för närvarande inte finns några lagrade procedurer i Postgres (upp till Postgres 10), bara funktioner - som ger nästan men inte riktigt samma funktionalitet, som du har angett i frågan.
Och vilken funktion som helst kan användas i FROM
sats av en SELECT
fråga som vilken annan tabell som helst.
Uppdatering:
SQL-procedurer ("lagrade procedurer") introduceras med Postgres 11.
Manualen för CREATE PROCEDURE
.
SQL själv kräver att veta returtypen vid körning. Det finns ett gränsfall :du kan deklarera returtypen med funktionsanropet med polymorfa typer . Detaljerade instruktioner här (det sista kapitlet är mest relevant för dig):
- Refaktorera en PL/pgSQL-funktion för att returnera utdata från olika SELECT-frågor
- Kan det göra detsamma, förutom att använda lagrade procedurer som finns i en extern tredjepartsdatabas (kanske via främmande dataomslag eller någon annan mekanism)?
Det är ett NEJ baserad på samma princip. Om du använder utländska tabeller måste du ange en tydligt definierad returtyp på ett eller annat sätt.
Du kanske kunna klumpa ihop hela raden som härrör från en SQL-Server-lagrad-procedur till en enda tabbavgränsad textrepresentation, men sedan (förutom att vara felbenägen och ineffektiv) har du en enda kolumn och behöver metainformationen som definierar enskilda kolumner ett eller annat sätt att extrahera kolumner - fånga 22.