Officiellement, PostgreSQL n'a que des "fonctions". Les fonctions de déclenchement sont parfois appelées "procédures de déclenchement", mais cet usage n'a pas de sens distinct. En interne, les fonctions sont parfois appelées procédures, comme dans le catalogue système pg_proc
. C'est une retenue de PostQUEL. Toutes les fonctionnalités que certaines personnes (ayant éventuellement une expérience dans différents systèmes de base de données) pourraient associer à des procédures, telles que leur pertinence pour empêcher les injections SQL ou l'utilisation de paramètres de sortie, s'appliquent également aux fonctions telles qu'elles existent dans PostgreSQL.
Désormais, lorsque les membres de la communauté PostgreSQL parlent de "procédures stockées" ou de "procédures stockées réelles", ils désignent souvent une caractéristique hypothétique d'un objet de type fonction pouvant démarrer et arrêter des transactions dans son corps, ce que les fonctions actuelles ne peuvent pas. faire. L'utilisation de l'expression "procédure stockée" dans ce contexte semble se faire par analogie avec d'autres produits de base de données. Voir ce fil de liste de diffusion pour une idée vague.
Dans la pratique, toutefois, cette distinction entre fonction et procédure en termes de capacités de contrôle des transactions n'est pas universellement acceptée, et de nombreux programmeurs sans biais de base de données prendront une interprétation de type Pascal d'une procédure comme une fonction sans valeur de retour. (Le standard SQL semble prendre un terrain d'entente, en ce sens qu'une procédure a par défaut un comportement de transaction différent de celui d'une fonction, mais cela peut être ajusté par objet.) Donc, dans tous les cas, et surtout quand on regarde des questions sur Stack Exchange avec Pour un public très hétérogène, évitez de trop en prendre et utilisez des termes plus clairs ou définissez les propriétés que vous attendez.
Peter Eisentraut
la source
En comparant la réponse acceptée du niveau conceptuel abstrait, je comprends la différence entre la fonctionnalité et la perspective entrée / sortie. Ci-dessous, j'ai utilisé sp et f pour représenter la procédure stockée et la fonction, respectivement.
Utilisation dans une expression: sp ne peut pas être utilisé dans une expression avec une fonction, ce qui signifie que vous pouvez utiliser votre valeur renvoyée de af dans d'autres instructions, telles que
return a value: sp ne renvoie automatiquement une valeur que si vous spécifiez le type de retour refcursor , open et le curseur de retour. f renvoie le résultat dans la dernière instruction dans laquelle une clause 'return' est incorporée, comme une clause select .
return single / multiple result sets: ici, les ensembles de résultats renvoient à une liste de résultats dont le format peut varier, comme un ensemble d'entiers uniques, un tableau de texte et deux tableaux. sp peut renvoyer plusieurs ensembles tant que vous spécifiez le type de retour refcursor, ouvrez et renvoyez un curseur. Cependant, f ne peut renvoyer qu'un seul type d'ensemble.
Habituellement, les procédures stockées sont utilisées pour modifier les données ou la structure de la base de données lorsqu'une valeur renvoyée n'est pas nécessaire, comme supprimer, mettre à jour, supprimer , etc. ou des situations où plusieurs ensembles de résultats sont requis. La fonction, en revanche, est principalement choisie pour les requêtes simples.
Pour plus de détails concernant mon explication, veuillez vous référer à ce lien: Procédures stockées et fonctions dans PostgreSQL
la source