Erstellen und Verwenden einer Funktion in Der Azure-Datenbank für PostgreSQL

Abgeschlossen

Wir haben bereits gelernt, dass PostgreSQL verschiedene Sprachen unterstützt. Funktionen können in vier verschiedene Typen unterteilt werden:

  • In SQL geschriebene Funktionen.
  • Prozedurale Sprachfunktionen, geschrieben in einer unterstützten Prozedursprache wie PL.pgSQL.
  • Interne Funktionen.
  • C-Programmiersprachfunktionen.

Darüber hinaus kann der Zweck der Funktion auch als veränderlich, unveränderlich oder stabil kategorisiert werden.

Eine veränderliche (Standard)-Funktion kann die Datenbank ändern und kann möglicherweise nicht jedes Mal dasselbe Ergebnis mit denselben Eingabeparametern zurückgeben. Jedes Mal, wenn diese Funktion aufgerufen wird, muss diese neu ausgewertet werden.

Eine stabile Funktion kann die Datenbank nicht ändern und gibt dasselbe Ergebnis zurück, wenn dieselben Argumente übergeben und innerhalb derselben Anweisung ausgeführt werden. Wenn diese Funktion mehrmals aufgerufen wird, kann der Abfrageoptimierer die Ergebnisse des letzten Aufrufs verwenden.

Eine unveränderliche Funktion kann die Datenbank nicht ändern und gibt dieselben Ergebnisse zurück, wenn dieselben Argumente übergeben werden, unabhängig von der Abfrage, die sie aufruft.

Die Volatilität einer Funktion macht einen großen Unterschied zur Effizienz, mit der der Abfrageoptimierer sie behandelt.

Erstellen einer Funktion

Eine Funktion gibt einen einzelnen Wert zurück und kann in einer SELECT-Anweisung verwendet werden.

Die Syntax zum Erstellen einer Funktion lautet:

CREATE [OR REPLACE] FUNCTION
myfunction ([inputparam] type {default})
RETURNS returntype AS
$$
SQL body
$$
LANGUAGE 'language_name';
CREATE FUNCTION

Wie bei gespeicherten Prozeduren wird das Symbol $$ verwendet, um die Zeichenfolge zu starten und zu beenden.

Funktionen verwenden die folgenden Parameter:

  • name: kann optional den Namen des Schemas enthalten.
  • argmode - der Modus des Arguments. Kann IN, OUT, INOUT oder VARIADIC sein. Der Standardwert ist IN. VARDIAC ist eine nicht definierte Anzahl von Eingabeargumenten desselben Typs und gefolgt von OUT-Argumenten. OUT- und INOUT-Argumente können nicht zusammen mit den RETURNS TABLE-Notationen verwendet werden.
  • argname - Argumentname.
  • argtype - der Argumentdatentyp. Es kann sich um Basis-, zusammengesetzte oder Domänentypen handeln oder um einen Verweis auf einen Tabellenspaltentyp. Der Spaltentyp wird als table_name.column_name%TYPEgeschrieben. Dieser Datentyp kann dazu beitragen, eine Funktion unabhängig von Tabellendefinitionsänderungen vorzunehmen.
  • t_expr – Ein Standardwert (desselben Typs), wenn der Parameter nicht angegeben ist. Nur IN- und INOUT-Parameter weisen einen Standardwert auf. Eingabeparameter, die auf einen Parameter mit einem Standardwert folgen, müssen auch Standardwerte aufweisen.
  • Rettype – Der Rückgabedatentyp, bei dem es sich um einen Basis-, Zusammengesetzt- oder Domänentyp handeln kann oder auf einen Tabellenspaltentyp verweisen kann. Wenn die Funktion keinen Wert zurückgibt, geben Sie den Rückgabetyp als void an. Wenn OUT- oder INOUT-Parameter vorhanden sind, kann die RETURNS-Klausel weggelassen werden. Wenn vorhanden, muss er dem Ergebnistyp zustimmen, der von den Ausgabeparametern impliziert wird: RECORD, wenn mehrere Ausgabeparameter vorhanden sind, oder demselben Typ wie der einzelne Ausgabeparameter. Der SETOF-Modifizierer gibt an, dass die Funktion einen Satz von Elementen anstelle eines einzelnen Elements zurückgibt. Auf den Typ einer Spalte wird verwiesen, indem table_name geschrieben wird.
  • column_name – Der Name einer Ausgabespalte in der SYNTAX RETURNS TABLE. Dieser Parameter deklariert einen benannten OUT-Parameter, mit der Ausnahme, dass RETURNS TABLE auch RETURNS SETOF impliziert.
  • column_type – Der Datentyp einer Ausgabespalte in der SYNTAX RETURNS TABLE.
  • lang_name - die Sprache, die zum Schreiben der Prozedur verwendet wird. Der Standardwert ist SQL, wenn sql_body angegeben wird. Kann „sql“, „c“, „internal“ oder der Name einer benutzerdefinierten Prozedursprache sein, z. B. plpgsql.

Verwenden Sie die Schlüsselwörter IMMUTABLE, STABLE oder VOLATILE als Hinweis auf den Abfrageoptimierer zur Funktion. VOLATIL ist die Standardeinstellung.

Aufrufen einer Funktion

Eine Funktion kann in einer Abfrage verwendet werden, indem alle relevanten Parameter an sie übergeben werden. Beispiel:

SELECT myfunction(3), CatID, CatName
    FROM myCats

Integrierte Funktionen

PostgreSQL enthält viele integrierte Funktionen, die Sie in Ihren Abfragen verwenden können. Thesen umfassen Vergleiche, Aggregieren von Daten, mathematische Funktionen usw. Eine vollständige Liste der PostgreSQL-Funktionen finden Sie in der Onlinedokumentation.

Ein Beispiel für eine integrierte Zeichenfolgenfunktion ist Substring.

substring (*string* text [ FROM *start* integer ] [ FOR *count* integer ] ) → text

Diese Funktion verwendet drei Eingabeparameter:

  • Zeichenfolge (Texttyp)
  • FROM start (Typ „Integer“)
  • FOR Anzahl (Typ „Integer“)

„substring“ gibt einen Teil des Eingabetexts zurück, beginnend mit dem Zeichen start und endend nach count Zeichen. Beispiel:

substring('Thomas' from 2 for 3) → hom
substring('Thomas' from 3) → omas
substring('Thomas' for 2) → Th

Diese Funktion ist identisch mit substr:

substr ( *string* text, *start* integer [, *count* integer ] ) → text
substr('alphabet', 3) → phabet
substr('alphabet', 3, 2) → ph

Hinweis

Wenn Sie mit Funktionen vertraut sind, werden Sie feststellen, dass in der ersten Version Schlüsselwörter anstelle von Kommas zum Trennen von Argumenten verwendet werden. PostgreSQL bietet beide Versionen dieser Funktionen.