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?
- Czym jest polecenie CREATE Function?
- Syntaktyka polecenia PostgreSQL CREATE Function
- Example of PostgreSQL Create Function Command
- Creating a new function
- Tworzenie funkcji w PostgreSQL
- Tworzenie funkcji w PostgreSQL za pomocą pgAdmin
- 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:
- Creating a function using SQL Shell(psql)
- 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.
- How to Call a user-defined function
- Wywołanie funkcji przy użyciu notacji pozycyjnej
- Wywołanie funkcji przy użyciu notacji nazwanej
- Wywołanie funkcji za pomocą notacji mieszanej
- Przegląd
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 |
|
|
|
Function |
|
RETURN |
|
Language plpgsql |
|
Function_body |
|
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:
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.
Możemy również zidentyfikować funkcję get_car_Price() na liście Functions jak widać na poniższym zrzucie ekranu:
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:
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.
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.
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:
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.
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.
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 ’:=’.
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.
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.
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.
.