Függvény létrehozása és használata az Azure Database for PostgreSQL-ben

Befejeződött

Már megtanultuk, hogy a PostgreSQL különböző nyelveket támogat. A függvények négy különböző típusba sorolhatók:

  • SQL-ben írt függvények.
  • Az eljárásnyelvi függvények támogatott eljárásnyelven, például PL.pgSQL-ben írhatók.
  • Belső függvények.
  • C-language függvények.

Emellett a függvény rendeltetése is besorolható változékonyként, nem módosíthatóként vagy stabilként.

Egy illékony (alapértelmezett) függvény módosíthatja az adatbázist, és nem feltétlenül ugyanazt az eredményt adja vissza minden alkalommal ugyanazokkal a bemeneti paraméterekkel. Minden alkalommal, amikor ezt a függvényt meghívják, újraértékelésre van szükség.

Egy stabil függvény nem tudja módosítani az adatbázist, és ugyanazt az eredményt adja vissza, ha ugyanazokat az argumentumokat adja vissza, és ugyanabban az utasításban fut. Ha ezt a függvényt többször is meghívják, a lekérdezésoptimalizáló a legutóbbi híváskor kapott eredményeket használhatja.

Egy nem módosítható függvény nem tudja módosítani az adatbázist, és ugyanazokat az eredményeket adja vissza, ha ugyanazokat az argumentumokat adja vissza, függetlenül attól, hogy a lekérdezés meghívja-e.

A függvények volatilitása nagyban különbözik a lekérdezésoptimalizáló által kezelt hatékonyságtól.

Függvény létrehozása

A függvények egyetlen értéket adnak vissza, és a SELECT utasításban használhatók.

A függvények létrehozásának szintaxisa a következő:

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

A tárolt eljárásokhoz hasonlóan a $$ szimbólumot használjuk a sztring elindítására és befejezésére.

A függvények a következő paramétereket veszik figyelembe:

  • név – opcionálisan adja meg a séma nevét.
  • argmode - az argumentum módja. Lehet IN, OUT, INOUT vagy VARIADIC. Az alapértelmezett érték az IN. A VARDIAC az azonos típusú bemeneti argumentumok meghatározatlan száma, amelyet OUT argumentumok követnek. Az OUT és az INOUT argumentumok nem használhatók a RETURNS TABLE kifejezéssel együtt.
  • argname – argumentum neve.
  • argtype – az argumentum adattípusa. Lehet alap-, összetett- vagy tartománytípus, vagy hivatkozhat táblaoszlop-típusra. Az oszloptípus az alábbi formátumban van megadva: table_name.column_name%TYPE. Ez az adattípus segíthet függetlensé tenni egy függvényt a tábladefiníció módosításaitól.
  • t_expr – Alapértelmezett érték (azonos típusú), ha a paraméter nincs megadva. Csak az IN és az INOUT paraméterek rendelkeznek alapértelmezett értékkel. Az alapértelmezett értékkel rendelkező paramétereket követő bemeneti paramétereknek szintén alapértelmezett értékekkel kell rendelkezniük.
  • rettype – A visszatérési adattípus, amely lehet alap-, összetett vagy tartománytípus, vagy hivatkozhat egy táblaoszloptípusra. Ha a függvény nem ad vissza értéket, adja meg a visszatérési típust üresként. Out vagy INOUT paraméterek esetén a RETURNS záradék elhagyható. Ha jelen van, akkor meg kell egyeznie a kimeneti paraméterek által vélt eredménytípussal: RECORD, ha több kimeneti paraméter van, vagy ugyanaz a típus, mint az egyetlen kimeneti paraméter. A SETOF módosító azt jelzi, hogy a függvény egy elemkészletet ad vissza egyetlen elem helyett. Az oszlop típusára table_name írása hivatkozik.
  • column_name – Egy kimeneti oszlop neve a RETURNS TABLE szintaxisban. Ez a paraméter egy elnevezett OUT paramétert deklarál, azzal a kivételrel, hogy a RETURNS TABLE a RETURNS SETOF függvényt is magában foglalja.
  • column_type – Egy kimeneti oszlop adattípusa a RETURNS TABLE szintaxisban.
  • lang_name - az eljárás megírásához használt nyelv. Az alapértelmezett sql, ha sql_body van megadva. Lehet sql, c, belső vagy felhasználó által definiált eljárási nyelv neve, például plpgsql.

Használja az IMMUTABLE, a STABLE vagy a VOLATILE kulcsszavakat a függvény lekérdezésoptimalizálójának tippjeként. Az VOLATILE az alapértelmezett.

Függvény meghívása

A függvények a lekérdezésekben úgy használhatók, hogy minden releváns paramétert átadnak neki. Például:

SELECT myfunction(3), CatID, CatName
    FROM myCats

Beépített függvények

A PostgreSQL számos beépített függvényt tartalmaz, amelyeket a lekérdezésekben használhat. Ezek a tézisek az összehasonlításokat, az adatok összesítését, a matematikai függvényeket stb. tárgyalják. A PostgreSQL-függvények teljes listáját az online dokumentációban találja .

Beépített sztringfüggvényre példa .

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

Ez a függvény három bemeneti paramétert vesz igénybe:

  • String (szövegtípus)
  • KEZDŐÉRTÉKTŐL (egész szám típus)
  • FOR count (típusú integer)

A Részszöveg visszaadja a bemeneti szöveg egy részét, kezdve a karakterrel, és megáll a . karakter után. Például:

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

Ez a függvény ugyanaz, mint a substr:

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

Jegyzet

Ha ismeri a függvényeket, észrevette, hogy az első verzió a kulcsszavakat használja a vesszők helyett az argumentumok elválasztásához. A PostgreSQL ezen függvények mindkét verzióját biztosítja.