Offiziell hat PostgreSQL nur "Funktionen". Triggerfunktionen werden manchmal als "Triggerprozeduren" bezeichnet, aber diese Verwendung hat keine eindeutige Bedeutung. Intern werden Funktionen manchmal als Prozeduren bezeichnet, z. B. im Systemkatalog pg_proc
. Das ist ein Überbleibsel von PostQUEL. Alle Funktionen, die einige Personen (möglicherweise mit Erfahrung in verschiedenen Datenbanksystemen) mit Prozeduren in Verbindung bringen, z. B. ihre Relevanz für das Verhindern von SQL-Injektionen oder die Verwendung von Ausgabeparametern, gelten auch für Funktionen, wie sie in PostgreSQL vorhanden sind.
Wenn die Leute in der PostgreSQL-Community jedoch von "gespeicherten Prozeduren" oder "echten gespeicherten Prozeduren" sprechen, meinen sie oft ein hypothetisches Merkmal eines funktionsähnlichen Objekts, das Transaktionen in seinem Körper starten und stoppen kann, etwas, das aktuelle Funktionen nicht können machen. Die Verwendung des Begriffs "gespeicherte Prozedur" in diesem Zusammenhang scheint analog zu anderen Datenbankprodukten zu sein. In diesem Mailinglisten- Thread finden Sie eine vage Vorstellung.
In der Praxis wird diese Unterscheidung von Funktion und Prozedur hinsichtlich ihrer Transaktionssteuerungsfähigkeiten jedoch nicht allgemein akzeptiert, und sicherlich werden viele Programmierer ohne Datenbankverzerrung eine Pascal-ähnliche Interpretation einer Prozedur als eine Funktion ohne Rückgabewert annehmen. (Der SQL-Standard scheint einen Mittelweg einzuschlagen, da eine Prozedur standardmäßig ein anderes Transaktionsverhalten aufweist als eine Funktion, dies kann jedoch objektspezifisch angepasst werden.) Also auf jeden Fall und insbesondere bei Fragen zu Stack Exchange mit Bei einem sehr gemischten Publikum sollten Sie vermeiden, zu viel anzunehmen, klarere Begriffe verwenden oder die Eigenschaften definieren, die Sie erwarten.
Wenn ich die akzeptierte Antwort von der abstrakten konzeptuellen Ebene vergleiche, verstehe ich den Unterschied zwischen Funktionalität und Ein- / Ausgabeperspektive. Unten habe ich sp und f verwendet, um gespeicherte Prozeduren bzw. Funktionen darzustellen.
Verwendung in einem Ausdruck: sp kann nicht in einem Ausdruck verwendet werden, während function kann. Dies bedeutet, dass Sie Ihren zurückgegebenen Wert aus af in anderen Anweisungen wie verwenden können
Wert zurückgeben: sp gibt nur dann automatisch einen Wert zurück, wenn Sie den Rückgabetyp refcursor angeben , einen Cursor öffnen und zurückgeben. f gibt das Ergebnis in der letzten Anweisung zurück, in die eine 'return'-Klausel wie eine select- Klausel eingebettet ist.
Zurückgeben einzelner / mehrerer Ergebnismengen: Hier beziehen sich Ergebnismengen auf eine Liste von Ergebnissen, die sich im Format unterscheiden können, z. B. eine Menge von einzelnen Ganzzahlen, Textfeldern und zwei Tabellen. sp kann mehrere Mengen zurückgeben, solange Sie den Rückgabetyp refcursor angeben, einen Cursor öffnen und zurückgeben. F kann jedoch nur einen Satztyp zurückgeben.
In der Regel werden gespeicherte Prozeduren verwendet, um die Datenbankdaten oder -strukturen zu ändern, bei denen kein Rückgabewert erforderlich ist, z. B. Löschen, Aktualisieren, Löschen usw .; oder Situationen, in denen mehrere Ergebnismengen erforderlich sind. Die Funktion wird dagegen meist für einfache Abfragen gewählt.
Weitere Informationen zu meiner Erklärung finden Sie unter folgendem Link: Gespeicherte Prozeduren und Funktionen in PostgreSQL
quelle