- PostgreSQL peut-il effectuer une jointure entre deux ~procédures où les colonnes ne sont pas connues jusqu'à l'exécution ?
La réponse de base est simple car il n'y a actuellement aucune procédure stockée dans Postgres (jusqu'à Postgres 10), juste des fonctions - qui fournissent presque mais pas tout à fait les mêmes fonctionnalités, comme vous l'avez expliqué dans la question.
Et n'importe quelle fonction peut être utilisée dans le FROM
clause d'un SELECT
requête comme n'importe quelle autre table.
Mise à jour :
Les procédures SQL ("procédures stockées") sont introduites avec Postgres 11.
Le manuel pour CREATE PROCEDURE
.
SQL lui-même exige de connaître le type de retour au moment de l'exécution. Il y a un cas limite :vous pouvez déclarer le type de retour avec l'appel de fonction en utilisant des types polymorphes . Instructions détaillées ici (le dernier chapitre étant le plus pertinent pour vous) :
- Refactoriser une fonction PL/pgSQL pour renvoyer la sortie de diverses requêtes SELECT
- Peut-il faire la même chose, sauf en utilisant des procédures stockées qui résident dans une base de données tierce externe (peut-être via des wrappers de données étrangers ou un autre mécanisme) ?
C'est un NON , aussi, basé sur le même principe. Si vous utilisez des tables étrangères, vous devez fournir un type de retour clairement défini dans un sens ou dans l'autre.
Vous pourriez être capable de regrouper toute la ligne résultant d'une procédure stockée SQL-Server dans une seule représentation de texte délimitée par des tabulations, mais alors (en plus d'être sujet aux erreurs et inefficace) vous avez une seule colonne et avez besoin des méta-informations définissant les colonnes individuelles l'une ou l'autre façon d'extraire les colonnes - catch 22.