web-dev-qa-db-fra.com

Différence entre les procédures stockées et les fonctions définies par l'utilisateur

Quelqu'un peut-il expliquer quelle est la différence exacte entre les procédures stockées et les fonctions définies par l'utilisateur, et dans quel contexte chacune est utile?

39
vasu

C'est ce que je garde toujours à l'esprit :)

  • La procédure peut renvoyer des valeurs zéro ou n, tandis que la fonction peut renvoyer une valeur obligatoire.
  • Les procédures peuvent avoir des paramètres d’entrée/sortie, alors que les fonctions ne peuvent avoir que des paramètres d’entrée.
  • La procédure permet de sélectionner aussi bien que les instructions DML, alors que la fonction ne permet que les instructions sélectionnées.
  • Les fonctions peuvent être appelées depuis une procédure alors que les procédures ne peuvent pas être appelées depuis une fonction.
  • Les exceptions peuvent être gérées par un bloc try-catch dans une procédure, alors que le bloc try-catch ne peut pas être utilisé dans une fonction.
  • Nous pouvons opter pour la gestion des transactions en procédure alors que nous ne pouvons pas entrer en fonction.
  • Les procédures ne peuvent pas être utilisées dans une instruction select, alors que la fonction peut être incorporée dans une instruction select.
  • UDF peut être utilisé dans les instructions SQL n'importe où dans la section WHERE/HAVING/SELECT où les procédures stockées ne peuvent pas l'être.
  • Les fichiers UDF qui renvoient des tables peuvent être traités comme un autre ensemble de lignes. Cela peut être utilisé dans des JOIN avec d'autres tables.
  • Les fichiers UDF en ligne peuvent être des vues qui prennent des paramètres et peuvent être utilisées dans les opérations JOIN et d'autres opérations Rowset.

Source http://www.codeproject.com/Tips/286539/Difference-between-stored-procedure-and-function

42
Singleton

Une fonction renvoie toujours une valeur et ne peut pas effectuer des instructions DML (INSERT/UPDATE/DELETE).

Une procédure stockée ne peut pas renvoyer de valeur (vous devez utiliser un paramètre OUT) et peut exécuter des instructions DML.

Avantage d'utiliser une fonction par rapport à une procédure stockée?


Mis à part la comparaison ci-dessus, ils sont égaux. Toutefois, étant donné la comparaison, il est probable que vous utiliserez une procédure stockée plus souvent qu'une fonction, en fonction de vos tâches.

13
OMG Ponies

La fonction définie par l'utilisateur a peu de limitations, comme les instructions DML peuvent être utilisées, etc.

5
gkpstar

Différences:

  1. Les procédures peuvent accepter les paramètres de type entrée (par défaut), sortie et entrée. Les fonctions ne peuvent accepter que les paramètres de type d'entrée.

  2. Les procédures peuvent ou non renvoyer une valeur ou peuvent renvoyer plusieurs valeurs à l'aide des paramètres OUTPUT et/ou INOUT. Une procédure peut renvoyer jusqu'à 1024 valeurs via les paramètres OUTPUT et/ou INOUT ..__ La fonction ne renvoie toujours qu'une valeur.

  3. La procédure stockée renvoie toujours la valeur entière par défaut, zéro. Le type de retour de fonction peut être scalaire ou table ou des valeurs de table.

  4. Les procs stockés peuvent créer une table mais ne peuvent pas renvoyer de table. Les fonctions peuvent créer, mettre à jour et supprimer la variable de table. Il peut retourner une table

  5. Les procédures stockées peuvent affecter l'état de la base de données en utilisant les opérations d'insertion, de suppression, de mise à jour et de création. Les fonctions ne peuvent pas affecter l'état de la base de données, ce qui signifie que nous ne pouvons pas effectuer d'opérations d'insertion, de suppression, de mise à jour et de création d'opérations sur la base de données.

  6. Les procédures stockées sont stockées dans une base de données sous la forme compilée. Les fonctions sont analysées et compilées uniquement à l'exécution.

  7. Les procs stockés peuvent être appelés indépendamment en utilisant le mot clé exec. La procédure stockée ne peut pas être utilisée dans la clause select/where/having. Les fonctions sont appelées à partir de la clause select/where/having. Même nous pouvons joindre deux fonctions.

  8. Normalement, une procédure stockée sera utilisée pour effectuer des tâches spécifiques . Des fonctions seront utilisées pour calculer une valeur. La procédure stockée permet d’obtenir getdate () ou d’autres fonctions non déterministes. La fonction n’autorisera pas les fonctions non déterministes telles que getdate ().

  9. Dans les procédures stockées, nous pouvons utiliser des instructions de transaction. Nous ne pouvons pas utiliser dans les fonctions.

  10. Les procédures stockées peuvent effectuer toutes les opérations DML, telles que l'insertion du nouvel enregistrement, la mise à jour des enregistrements et la suppression des enregistrements existants. La fonction ne nous permet pas d’effectuer les opérations DML dans les tables de base de données comme dans la procédure stockée. Cela nous permet de ne faire que l'opération select. Cela ne permettra pas de faire le DML sur des tables existantes. Néanmoins, nous ne pouvons effectuer l'opération DML que sur la variable de table à l'intérieur des fonctions définies par l'utilisateur.

  11. Des tables temporaires (dérivées) peuvent être créées dans des procédures stockées. Ce n'est pas possible dans le cas de fonctions.

  12. Lorsque les instructions SQL rencontrent une erreur, T-SQL ignore cette erreur dans un SPROC et passe à l'instruction suivante du code restant. Dans le cas de fonctions, T-SQL arrêtera l'exécution des prochaines instructions.

Référer ce lien:

https://www.spritle.com/blogs/2011/03/03/differences-between-stored-procedures-and-user-defined-functions/

0
Vinayak Savale