- Může PostgreSQL provést spojení mezi dvěma ~procedurami, kde sloupce nejsou známy až do běhu?
Základní odpověď je jednoduchá, protože v současnosti neexistují žádné uložené procedury v Postgresu (až do Postgres 10) pouze funkce - které poskytují téměř, ale ne zcela stejnou funkcionalitu, jak jste uvedli v otázce.
A v FROM
lze použít jakoukoli funkci klauzule SELECT
dotaz jako každá jiná tabulka.
Aktualizace:
Procedury SQL ("uložené procedury") jsou představeny v Postgres 11.
Příručka pro CREATE PROCEDURE
.
SQL sám vyžaduje znát návratový typ za běhu. Existuje hraniční případ :návratový typ můžete deklarovat voláním funkce pomocí polymorfních typů . Podrobné pokyny zde (nejdůležitější pro vás je poslední kapitola):
- Refaktorujte funkci PL/pgSQL tak, aby vrátila výstup různých SELECT dotazů
- Může to udělat totéž, kromě použití uložených procedur, které jsou umístěny v externí databázi třetí strany (možná prostřednictvím cizích datových obalů nebo jiného mechanismu)?
To je NE také na stejném principu. Pokud používáte cizí tabulky, musíte poskytnout jasně definovaný návratový typ jedním nebo druhým způsobem.
Možná být schopen shrnout celý řádek vyplývající z procedury uložené na serveru SQL do jediné textové reprezentace oddělené tabulátory, ale pak (kromě toho, že je náchylný k chybám a je neefektivní), máte jeden sloupec a potřebujete metainformace definující jednotlivé sloupce jeden nebo druhý způsob extrahování sloupců - catch 22.