Was sind die Unterschiede zwischen gespeicherten Prozeduren, Funktionen und Routinen?

75

Was ist im MySQL-Datenbankkontext der Unterschied zwischen diesen drei Begriffen:

  • gespeicherte Prozedur
  • gespeicherte Funktion
  • gespeicherte Routine

Auch die eingebauten Funktionen wie diese Datums- / Uhrzeitfunktionen (z. B. WEEKDAY()usw.) werden als was betrachtet?

Yang
quelle
3
verwandte Antwort: MySQL gespeicherte Prozedur vs Funktion , ich fand den Link, während ich meine Antwort verbesserte, daher verlinkt :)
Grijesh Chauhan
Sowohl gespeicherte Prozeduren als auch Funktionen sind Datenbankobjekte, die eine Reihe von Anweisungen enthalten. Gespeicherte Prozeduren werden vorkompiliert, andererseits werden Funktionen bei jedem Aufruf kompiliert. Die Funktion muss einen Rückgabewert haben, ist jedoch für Prozeduren optional. In gespeicherten Prozeduren können Sie INSERT, UPDATE, DELETE verwenden, in Funktionen können Sie jedoch nur die SELECT-Anweisung verwenden.
Miroslav Savel

Antworten:

88

Google ist dein Freund. Die erste Übereinstimmung für "MySQL-Routinefunktionsprozedur" lautet wie folgt: http://dev.mysql.com/doc/refman/5.0/en/stored-routines-syntax.html

Eine kurze Zusammenfassung:

Eine gespeicherte Routine ist entweder eine Prozedur oder eine Funktion.

Eine Prozedur wird mit einer CALL-Anweisung aufgerufen und kann Werte nur mit Ausgabevariablen zurückgeben.

Eine Funktion kann wie jede andere Funktion aus einer Anweisung heraus aufgerufen werden und einen skalaren Wert zurückgeben.

Jakob
quelle
22
Ich stimme zwar dem RTFM-Gefühl zu. Diese Antwort wird jetzt von Google verwendet, um ein Inline-Ergebnis anzuzeigen.
Realistisch
50

Hier habe ich versucht, die Unterschiede zwischen Funktionen und Prozeduren zusammenzufassen:

  1. Eine FUNCTION gibt immer einen Wert mit der return-Anweisung zurück. PROCEDURE kann einen oder mehrere Werte über Parameter zurückgeben oder überhaupt keine zurückgeben.
  2. Funktionen werden normalerweise für Berechnungen verwendet, wobei normalerweise Prozeduren zum Ausführen von Geschäftslogik verwendet werden.
  3. Eine Funktion gibt nur 1 Wert zurück. Die Prozedur kann mehrere Werte zurückgeben (max. 1024).
  4. Die gespeicherte Prozedur gibt standardmäßig immer einen ganzzahligen Wert von Null zurück. Während Funktionsrückgabetypen Skalar- oder Tabellen- oder Tabellenwerte sein können.
  5. Gespeicherte Prozeduren haben einen vorkompilierten Ausführungsplan, während Funktionen dies nicht sind.
  6. Eine Funktion kann direkt durch eine SQL-Anweisung aufgerufen werden, SELECT func_name FROM DUALwährend Prozeduren dies nicht können.
  7. Gespeicherte Prozeduren haben die Sicherheit und reduzieren den Netzwerkverkehr. Außerdem können wir gespeicherte Prozeduren in einer beliebigen Anzahl von Anwendungen gleichzeitig aufrufen.
  8. Eine Funktion kann in SQL-Abfragen verwendet werden, während eine Prozedur in SQL-Abfragen nicht verwendet werden kann. Dies führt zu einem großen Unterschied zwischen Funktion und Verfahren.
Sujeet Kumar
quelle
30

Unterschied zwischen MySQL-Funktion und MySQL-Prozedur

MYSQL-Funktion

Es muss einen Wert zurückgeben. IN, OUTUnd INOUTkann nicht in function.But Rückgabedatentyp verwendet werden muss declare sein , wenn eine Funktion erstellen. Funktion kann aus einer SQL-Anweisung aufgerufen werden. Funktion gibt einen Wert zurück.

MYSQL-Prozedur

Rückgabewerte sind nicht obligatorisch, können jedoch mit dem Parameter OUT verwendet werden, um Rückgaben zu verarbeiten. Kann die IN| verwenden OUT| INOUTParameter. Die Prozedur kann nicht über die SQL-Anweisung aufgerufen werden. Prozedur gibt mehrere Werte mit OUToder INOUTParametern zurück.

Deepak Mani
quelle
5

VERFAHREN GEGEN FUNKTIONEN

1.  PROCEDURES may or may not return a value but FUNCTION must return a value
2.  PROCEDURES can have input/output parameter but FUNCTION only has input parameter.
3.  We can call FUNCTION from PROCEDURES but cannot call PROCEDURES from a function. 
4.  We cannot use PROCEDURES in SQL statement like SELECT, INSERT, UPDATE, DELETE, MERGE etc. but we can use them with FUNCTION.
5.  We can use try-catch exception handling in PROCEDURES but we cannot do that in FUNCTION. 
6.  We can use transaction in PROCEDURES but it is not possible in FUNCTION.
venkat
quelle
2

Die Funktion muss einen Wert zurückgeben, ist jedoch in der gespeicherten Prozedur optional (die Prozedur kann Null- oder n-Werte zurückgeben). Funktionen können nur Eingabeparameter haben, während Prozeduren Eingabe- / Ausgabeparameter haben können. Funktionen können über die Prozedur aufgerufen werden, während Prozeduren nicht über die Funktion aufgerufen werden können.

James
quelle