Funkcje PostgreSQL

W tym rozdziale poznamy działanie funkcji PostgreSQL, polecenie CREATE FUNCTION oraz przykładowe wywołanie funkcji PostgreSQL przy użyciu różnych narzędzi PostgreSQL, takich jak pgadmin4 oraz powłoka SQL (PSQL).

Poznaj również przykład wywołania funkcji zdefiniowanej przez użytkownika, takiej jak notacja pozycyjna notacja nazwana notacja mieszana.

Czym jest funkcja PostgreSQL?

Funkcja PostgreSQL lub procedura składowana jest zbiorem poleceń SQL i proceduralnych, takich jak deklaracje, przypisania, pętle, przepływ kontroli itp. przechowywanych na serwerze bazy danych i mogących być uruchamianych za pomocą interfejsu SQL. Są one również znane jako procedury składowane PostgreSQL.

Funkcje PostgreSQL możemy tworzyć w wielu językach, np. SQL, PL/pgSQL, C, Python itp.

Pozwalają one na wykonywanie operacji, które zazwyczaj wymagają wykonania różnych poleceń i rund w ramach funkcji w bazie danych.

Czym jest polecenie CREATE Function?

W PostgreSQL, jeśli chcemy określić nową funkcję zdefiniowaną przez użytkownika, możemy użyć polecenia CREATE FUNCTION.

Syntaktyka polecenia PostgreSQL CREATE Function

Syntaktyka polecenia PostgreSQL CREATE Function jest następująca:

W powyższej składni użyliśmy następujących parametrów, jak pokazano w poniższej tabeli:

Parametry Opis
function_name
  • Parametr function name służy do określenia nazwy funkcji.
  • The function name is written after the CREATE FUNCTION keyword.
  • We can use the OR REPLACE keyword if we want to change the current function.
  • And it is an optional parameter.
Function
  • After using the OR REPLACE keyword, we can define the function parameter list that are covered in the parentheses after the Function Name.
  • And a function can contain zero or several parameters.
RETURN
  • We can define the data type after the RETURN keyword, which we are going to return from the function.
  • It can be a base, composite, or domain type or reference of the type of a table column.
Language plpgsql
  • It is used to define the name of the Procedural language in which the function is executed.
  • And not just plpgsql, the PostgreSQL supports various procedural languages.
Function_body
  • The function_body contains the executable parts of the logics.

Example of PostgreSQL Create Function Command

Let us see a different example to understand the working of the PostgreSQL CREATE Function command.

We are taking the Car table from the Javatpoint database, created in the PostgreSQL Tutorial.

Creating a new function

In the below command, we are creating a new function, which counts the Cars whose Car_Price between the Price_from and Price_to parameters:

The get_car_Price function is divided into two main sections, which are Header and Function Body.

W sekcji Header zastosowaliśmy następujące parametry:

  • Przede wszystkim określamy nazwę funkcji jako get_car_Price(), która jest zapisana po funkcji create
  • Potem funkcja get_car_Price() zawiera dwa parametry Price_from i Price_to, posiadające typ danych integer.
  • Potem funkcja get_car_Price() pobiera liczbę całkowitą zdefiniowaną przez warunek return int.
  • I na koniec użyliśmy języka funkcji jako plpgsql.

W sekcji Function Body użyliśmy następujących parametrów:

  • W sekcji Function użyliśmy ilustracji dollar-quoted stringconstant, która zaczyna się od $$ i kończy na $$.
  • Pomiędzy znakiem $$ możemy umieścić blok, który obejmuje deklarację i logikę funkcji.
  • W bloku deklaracji zadeklarowaliśmy zmienną o nazwie Car_count,która przechowuje samochody wybrane z listy Car
  • W ciele sekcji bloku, użyliśmy polecenia SELECT INTO, aby wybrać ceny samochodów, których wartości znajdują się pomiędzy Price_from i Price_to i przekazać wynik do Car_count
  • Na końcu bloku użyliśmy polecenia RETURN, aby uzyskać wynik

Tworzenie funkcji w PostgreSQL

W PostgreSQL możemy utworzyć funkcję na dwa sposoby:

  • Tworzenie funkcji w PostgreSQL za pomocą pgAdmin
  • Tworzenie funkcji w PostgreSQL za pomocą SQL Shell

Tworzenie funkcji w PostgreSQL za pomocą pgAdmin

Prześledzimy poniższy proces, aby utworzyć funkcję w pgAdmin:

Krok1

Na początku otworzymy najnowszą wersję pgAdmin w naszym lokalnym systemie, przejdziemy do drzewa obiektów i połączymy się z przykładową bazą danych Javatpoint, w której chcemy utworzyć funkcję.

Krok 2

Następnie otworzymy narzędzie zapytań klikając na Query tool w sekcji Tools, jak widać na poniższym zrzucie ekranu:

PoatgreSQL Function2

Krok 3

Aby utworzyć funkcję get_car_Price1(), użyjemy powyższego kodu w narzędziu zapytań i klikniemy przycisk Execute.

Po wykonaniu powyższego polecenia otrzymamy poniższe okno z komunikatem informującym, że funkcja get_car_Price1() została pomyślnie utworzona w podobnej bazie danych.

PoatgreSQL Function

Możemy również zidentyfikować funkcję get_car_Price() na liście Functions jak widać na poniższym zrzucie ekranu:

PoatgreSQL Function

Uwaga: Jeśli nie możemy zidentyfikować nazwy funkcji, możemy kliknąć prawym przyciskiem myszy na węzeł Functions i wybrać Odśwież… menu item to revive the function list:

PoatgreSQL Function

Creating a function using SQL Shell(psql)

We are going to follow the below process to create a table in psql:

Step1

  • Firstly, we will open the psqlin our local system, and we will connect to the database where we want to create a function.
  • We will create a table in the javatpointdatabase, which we created earlier in the PostgreSQL tutorial.

Step2

  • For connecting a database, we will enter the below command:

Output

After executing the above command, we will get the following output:

PoatgreSQL Function

Note: If we enter a similar command as above to create a function, in psql, it will issue the below error that is: the function get_car_price already exists with the same argument types.

PoatgreSQL Function

Therefore, to resolve this error, we create a new function as get_car_Price1() in the next step.

Step3

We will enter the below command to create a function as get_car_Price1() in the javatpoint database.

Output

We will get the following output on implementing the above command, which displays that the get_car_Price_count1() function has been created successfully.

PoatgreSQL Function

Step4

We can use the below command to list all user-defined functions in the existing database.

Output

After executing the above command, we will get the below output:

PoatgreSQL Function

How to Call a user-defined function

In PostgreSQL, we can call the user-defined function in three ways, which are as follows:

  • Notacja pozycyjna
  • Notacja nazwana
  • Notacja mieszana

Wywołanie funkcji przy użyciu notacji pozycyjnej

Jeśli chcemy opisać argumenty w podobnej kolejności jak parametry, możemy wywołać funkcję z pomocą notacji pozycyjnej.

Zobaczmy przykładowy przykład, aby zrozumieć działanie notacji pozycyjnej w celu wywołania konkretnej funkcji.

W poniższym przykładzie argumentami funkcji get_car_price() są 26000 i 70000, co odpowiada parametrom Cena_od i Cena_do.

Wyjście

Po wykonaniu powyższego polecenia otrzymamy następujące wyjście, które pobierze te cztery wiersze, których cena samochodu mieści się w przedziale od 26000 do 70000.

Funkcja PoatgreSQL

Gdy funkcja nie posiada prawie żadnych parametrów, możemy wywołać funkcję za pomocą notacji pozycyjnej.

Jeżeli funkcja zawiera kilka parametrów, możemy użyć notacji nazwanej do wywołania danej funkcji, ponieważ użycie notacji nazwanej sprawi, że wywołanie funkcji będzie bardziej zrozumiałe.

Wywołanie funkcji przy użyciu notacji nazwanej

W poniższym przykładzie przedstawiamy działanie wywołania funkcji get_car_Price() przy użyciu notacji nazwanej:

Wyniki

Wyniki

Po wykonaniu powyższego polecenia otrzymamy następujące wyniki, które wyświetlają cztery wiersze na podstawie powyższego zakresu car_price.

Funkcja PostgreSQL

W notacji wspomnianej wcześniej, użyliśmy znaku => do rozróżnienia nazwy i wartości argumentu.

PostgreSQL dopuszcza starszą składnię utworzoną na := dla kompatybilności wstecznej, jak możemy zobaczyć w następującym poleceniu:

Wyniki

Po wykonaniu powyższego polecenia, otrzymamy podobne wyniki w porównaniu do wyniku powyższego polecenia, gdzie użyliśmy '=>’ zamiast ’:=’.

PoatgreSQL Funkcja

Wywołanie funkcji za pomocą notacji mieszanej

Jest to zgrupowanie notacji pozycyjnej i nazwanej.

Zobaczmy przykładowy przykład, aby zrozumieć działanie Wywołania funkcji z użyciem notacji mieszanej.

W notacji mieszanej nie możemy używać Parametrów nazwanych przed Parametrami pozycyjnymi.

Na przykład:

W poniższym poleceniu użyjemy pojęcia nazwanego dla parametru Cena_od=>26000, natomiast dla parametru Cena_do użyliśmy pojęcia pozycyjnego jako 70000, co widzimy w poniższym poleceniu:

Output

Po wykonaniu powyższego polecenia PostgreSQL podnosi błąd, który mówi, że argument pozycyjny nie może podążać za argumentem nazwanym.

Funkcja PostgreSQL

Aby rozwiązać powyższy błąd, używamy notacji pozycyjnej i nazwanej dla funkcji get_car_price(), gdzie 26000 jest używane do reprezentowania notacji pozycyjnej; z drugiej strony, Price_to=>70000 jest używane do reprezentowania notacji nazwanej:

Wyjście

Po wykonaniu powyższego polecenia otrzymamy poniższe wyjście, które zwraca te samochody, których car_price mieści się w przedziale od 26000 do 70000.

Funkcje PostgreSQL

Przegląd

W części poświęconej funkcjom PostgreSQL zapoznaliśmy się z następującymi zagadnieniami:

  • Użyliśmy polecenia CREATE Function do utworzenia funkcji zdefiniowanej przez użytkownika dla konkretnej tabeli.
  • Zrozumieliśmy proces wywoływania funkcji zdefiniowanej przez użytkownika za pomocą różnych notacji, takich jak Positional, Named oraz Mixed.

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *