Quelle est la différence entre la fonction et la procédure en PL/SQL?Quelle est la différence entre la fonction et la procédure en PL/SQL?
Répondre
Une procédure n'a pas de valeur de retour, alors qu'une fonction a.
Exemple:
CREATE OR REPLACE PROCEDURE my_proc
(p_name IN VARCHAR2 := 'John') as begin ... end
CREATE OR REPLACE FUNCTION my_func
(p_name IN VARCHAR2 := 'John') return varchar2 as begin ... end
Remarquez que la fonction a une clause de retour entre la liste des paramètres et le mot-clé « comme ». Cela signifie qu'il devrait avoir la dernière déclaration à l'intérieur du corps de la fonction de lecture quelque chose comme:
return(my_varchar2_local_variable);
Où my_varchar2_local_variable est une varchar2 qui doit être retourné par cette fonction.
Pour clarifier un peu, vous pouvez toujours obtenir des valeurs OUT à partir d'une procédure - en fait vous pouvez avoir une valeur de retour pour chaque paramètre OUT que vous spécifiez. – GoingTharn
Une fonction peut être insérée dans une instruction SQL, par ex.
select foo
,fn_bar (foo)
from foobar
Ce qui ne peut pas être fait avec une procédure stockée. L'architecture de l'optimiseur de requêtes limite ce qui peut être fait avec des fonctions dans ce contexte, exigeant qu'elles soient pures (c'est-à-dire que les mêmes entrées produisent toujours la même sortie). Cela restreint ce qui peut être fait dans la fonction, mais permet de l'utiliser en ligne dans la requête si elle est définie comme "pure".
Sinon, une fonction (pas nécessairement déterministe) peut renvoyer une variable ou un jeu de résultats. Dans le cas d'une fonction renvoyant un ensemble de résultats, vous pouvez la joindre à une autre sélection dans une requête. Cependant, vous ne pouvez pas utiliser une fonction non déterministe comme celle-ci dans une sous-requête corrélée car l'optimiseur ne peut pas prédire quel type d'ensemble de résultats sera retourné (c'est intraitable par calcul, comme le problème d'arrêt).
Cela n'a peut-être pas de sens, mais l'optimiseur ne vous empêche pas d'utiliser des fonctions non déterministes n'importe où. –
- nous pouvons appeler une procédure stockée à l'intérieur de la procédure stockée, fonction dans la fonction, StoredProcedure dans la fonction, mais nous ne pouvons pas appeler la fonction dans la procédure stockée.
- nous pouvons appeler la fonction dans l'instruction select.
- Nous pouvons renvoyer la valeur de la fonction sans passer le paramètre de sortie en paramètre à la procédure stockée.
C'est ce que la différence que j'ai trouvé. S'il vous plaît laissez-moi savoir s'il y en a.
Vous êtes incorrect - il n'y a aucune raison pour laquelle vous ne pouvez pas appeler une fonction à partir d'une procédure. –
Voici les principales différences entre la procédure et la fonction,
- procédure est nommé bloc PL/SQL qui exécute une ou plusieurs tâches. où la fonction est appelée bloc PL/SQL qui effectue une action spécifique.
- La procédure peut renvoyer ou non une valeur où la fonction doit renvoyer une valeur.
- nous pouvons appeler des fonctions dans l'instruction select où, comme procédure, nous ne pouvons pas.
Une fonction ne peut-elle pas effectuer plus d'une "action"? Il ne renvoie que le type de données. – Ben
D'une manière toute simple, cela fait sens.
Fonctions:
Ces sous-programmes renvoient une valeur unique ; principalement utilisé pour calculer et renvoyer une valeur.
Procédure:
Ces ne subprograms retourner une valeur directement; principalement utilisé pour effectuer une action.
Exemple de programme:
CREATE OR REPLACE PROCEDURE greetings
BEGIN
dbms_output.put_line('Hello World!');
END ;
/
Exécution d'une procédure autonome:
Une procédure autonome peut être appelé de deux façons:
• Utilisation du EXECUTE
mot-clé • L'appel de la nom de la procédure d'un bloc PL/SQL
La procédure peut également être appelé d'un autre bloc PL/SQL:
BEGIN
greetings;
END;
/
Fonction:
CREATE OR REPLACE FUNCTION totalEmployees
RETURN number IS
total number(3) := 0;
BEGIN
SELECT count(*) into total
FROM employees;
RETURN total;
END;
/
programme suivant appelle la fonction totalCustomers
d'un autre bloc
DECLARE
c number(3);
BEGIN
c := totalEmployees();
dbms_output.put_line('Total no. of Employees: ' || c);
END;
/
Les procédures stockées et les fonctions sont appelées bloacks qui résident dans le Da tabase et peut être exécuté en tant que de besoin.
Les principales différences sont les suivantes:
1.A procédure stockée peut éventuellement des valeurs de retour à l'aide des paramètres, mais peut aussi être écrit d'une manière sans retourner une valeur fonction .Mais doit retourner une valeur
2. Une procédure stockée ne peut pas être utilisée dans une instruction select où les fonctions peuvent être utilisées dans une instruction select. En pratique, je choisirais une procédure stockée pour un groupe spécifique d'exigences et une fonction pour une exigence commune qui pourrait être partagée entre plusieurs scénarios pour g: comparer deux chaînes, ou les rogner ou prendre la dernière partie, si nous avons une fonction pour cela, nous pourrions l'utiliser globalement pour n'importe quelle application que nous avons
En quelques mots - la fonction renvoie quelque chose. Vous pouvez utiliser la fonction dans une requête SQL. La procédure fait partie du code pour faire quelque chose avec des données mais vous ne pouvez pas invoquer une procédure à partir d'une requête, vous devez l'exécuter dans un bloc PL/SQL.
- 1. Quelle est la différence entre la procédure et la procédure # 'dans Lisp/Clojure?
- 2. quelle est la différence entre:.! et: r !?
- 3. Quelle est la différence entre dict() et {}?
- 4. Quelle est la différence entre = et: =
- 5. quelle est la différence entre une procédure stockée et une fonction de valeur table?
- 6. Quelle est la différence entre « et" en JavaScript?
- 7. Quelle est la différence entre 'int?' et 'int' en C#?
- 8. Quelle est la différence entre read et readline en C#?
- 9. Quelle est la différence entre AppDomain.CurrentDomain.BaseDirectory et Application.ExecutablePath en pratique?
- 10. Quelle est la différence?
- 11. Quelle est la différence entre memset et memcpy dans C
- 12. Quelle est la différence entre _itoa et itoa?
- 13. Quelle est la différence entre un assistant et un partiel?
- 14. Quelle est la différence entre __reduce__ et __reduce_ex__?
- 15. Quelle est la différence entre TAggregateField.IsNull et (TAggregateField.Value = Null)
- 16. Quelle est la différence entre while (true) et loop?
- 17. Quelle est la différence entre $ (document) .ready (function() et (function() $
- 18. jQuery: Quelle est la différence entre '$ (this)' et 'this'?
- 19. Quelle est la différence entre EM Dash # 151; et # 8212 ;?
- 20. Quelle est la différence entre JAIN SIP et MJSIP?
- 21. Quelle est la différence entre nohup et un démon?
- 22. Quelle est la différence entre session.Merge et session.SaveOrUpdate?
- 23. Quelle est la différence entre l'événement onFocus et onMouseEnter?
- 24. Quelle est la différence entre RMI et Corba?
- 25. Quelle est la différence entre IEnumerator et IEnumerable?
- 26. Quelle est la différence entre "someValuesFrom" et "allValuesFrom"?
- 27. Quelle est la différence entre exit() et abort()?
- 28. Quelle est la différence entre this.click() et $ (this) .click()?
- 29. Quelle est la différence entre synchronisation synchronisée et statique?
- 30. Quelle est la différence entre GPLv2 et GPLv3?
Je ne suis pas d'accord avec cela étant un doublon. En général, les termes de langage de programmation comme la procédure et la fonction ne sont pas utilisés de la même manière dans un système de base de données. C'est une bonne question, c'est juste que la réponse est "la même différence qu'avec les langages de programmation: voir". –
Quelqu'un at-il la liste des différences depuis oracle 11g et en avant? Je pense que nous pouvons utiliser certaines fonctionnalités supplémentaires dans les fonctions maintenant! – MozenRath