Je comprends la distinction entre:
Dans SQL Server, les "procédures stockées" sont autorisées via EXEC
. Qu'est-ce que cela apporte sur toute autre fonction exécutée avec SELECT
qui renvoie NULL
?
Lorsque PostgreSQL obtient des procédures stockées, que m'apporteront-elles et quelle est la distinction formelle, le cas échéant, entre une fonction et une procédure stockée dans la spécification?
J'ai lu cette question mais elle semble antérieure à l'annonce de la mise en œuvre
Puisque Postgres fonctionne ( CREATE FUNCTION
) seulement exécuté dans un contexte de transaction (unique), plusieurs commandes importantes ne peuvent pas être exécutées à l'intérieur un corps fonctionnel. Comme CREATE DATABASE
ou CREATE INDEX CONCURRENTLY
ou VACUUM
. Le manuel:
VACUUM
ne peut pas être exécuté dans un bloc de transaction.
Les fonctions sont souvent appelées "procédures stockées", ce qui a toujours été un terme trompeur - probablement repris d'autres RDBMS. Avec l'arrivée de procédures SQL ( CREATE PROCEDURE
) dans Postgres 11, ce terme impropre doit être évité complètement.
Les procédures SQL peuvent commencer et terminer des transactions. Mais les commandes mentionnées ci-dessus ne sont pas autorisées du tout dans un bloc de transaction, donc elles ne peuvent pas non plus être incluses dans les procédures SQL.
Plusieurs ensembles de résultats sont prévus pour l'avenir, mais pas encore implémentés.
En relation:
Les fonctions PostgreSQL ne peuvent ni démarrer ni terminer les transactions. Ils sont bloqués avec la transaction héritée de leur requête d'appel.
Lorsque PostgreSQL obtient des procédures stockées, il pourra ouvrir et fermer des transactions.
Voir également,