Jak utworzyć funkcję zdefiniowaną przez użytkownika PostgreSQL

Jak utworzyć funkcję zdefiniowaną przez użytkownika PostgreSQL
„Gdy wielokrotnie wymaga wykonywania wielu instrukcji SQL, lepiej jest napisać funkcję lub procedurę postgresql zdefiniowaną przez użytkownika z tymi instrukcjami SQL. Usuwa duplikat kodu i ponownie wykorzystuje kod, wywołując funkcję z różnych aplikacji. W tym samouczku pokazano sposób tworzenia i używania różnych rodzajów funkcji zdefiniowanych przez użytkownika PostgreSQL."

Składnia

Składnia funkcji PostgreSQL podano poniżej.

Utwórz lub zastąp funkcję Funkcję_name (argument_list)
Zwraca return_type jako $ varible_name $
OGŁOSIĆ
deklaracja;
[…]
ZACZYNAĆ

[…]
Return Variable_name | wartość
KONIEC;
Język PLPGSQL;
  • Utwórz słowo kluczowe służy do utworzenia nowej funkcji zdefiniowanej przez użytkownika, a Słowo kluczowe Wymień służy do modyfikacji istniejącej funkcji.
  • Nazwa funkcji jest zdefiniowana przez nazwę funkcji, a funkcja może przyjmować jeden lub więcej argumentów. W funkcji można użyć trzech rodzajów argumentów. To są W, NA ZEWNĄTRZ, I Inout. Domyślnym argumentem funkcji jest W argument. Służy do przekazywania wartości do funkcji i nie można jej zmienić w funkcji. NA ZEWNĄTRZ Argument służy do zwrócenia wartości z funkcji. Inout Argument można wykorzystać do przekazywania wartości do funkcji i zwracania wartości z funkcji. Można go ponownie przypisać w funkcji jak Out argument.
  • Rodzaj danych zmiennej, która zostanie zwrócona przez funkcję, jest wymieniony po słowach kluczowych zwrotów.
  • Ciało funkcji rozpocznie się od słowa kluczowego deklaracji, w którym niezbędne zmienne zostaną zadeklarowane. Następnie wymagane instrukcje SQL zostaną zdefiniowane w blokach początkowych i końcowych.
  • Nazwa języka proceduralnego jest zdefiniowana po słowach kluczowych języków, w którym funkcja zostanie wykonana.

Wymagania wstępne

A. Zainstaluj PostgreSQL

Musisz zainstalować najnowszą wersję pakietów PostgreSQL w systemie operacyjnym Linux przed wykonaniem instrukcji SQL pokazanych w tym samouczku. Uruchom następujące polecenia, aby zainstalować i uruchom PostgreSQL:

$ sudo apt-get -y instalacja Postgresql PostgreSQL-Contib
$ sudo systemctl start postgresql.praca

Uruchom następujące polecenie, aby zalogować się do PostgreSQL z uprawnieniami root.

$ sudo -u postgres psql

B. Możesz utworzyć nazwaną bazę danych „TestDB” Uruchamiając następującą instrukcję SQL.

# Utwórz bazę danych testDB;

Jeśli chcesz utworzyć tabelę w testdb baza danych, wtedy musisz wpisać "\C" Aby zmienić bazę danych. Ale w tym samouczku nie zmieniłem bazy danych i tabeli, a wszystkie funkcje zostały utworzone w domyślnej bazie danych Postgres.

C. Utwórz tabelę o nazwie produkty z czterema polami i wstaw cztery rekordy do tabeli, aby przetestować funkcje zdefiniowane przez użytkownika, które zostaną utworzone w dalszej części tego samouczka.

# Utwórz produkty tabeli (
ID szeregowy klucz podstawowy,
Nazwa varchar (30),
Typ Varchar (20),
cena);

D. Włóż cztery rekordy do tabeli.

# Wstaw do produktów (nazwa, typ, cena)
Wartości („Samsung A40”, „Mobile”, 300),
(„A4”, „Mysz”, 20),
(„Sony 42”, „TV”, 1000),
(„Samsung 3TB”, „HDD”, 600);

Różne przykłady funkcji zdefiniowanych przez użytkownika PostgreSQL

Zastosowania funkcji zdefiniowanych przez użytkownika z argumentem i bez argumentu w PostgreSQL zostały pokazane poniżej przy użyciu wielu przykładów.

Przykład-1: Funkcja zdefiniowana przez użytkownika bez argumentu i wartości zwracania

Uruchom następującą instrukcję SQL, aby utworzyć funkcję o nazwie funkcja1 () bez żadnego argumentu, a funkcja nic nie zwróci. Funkcja zaktualizuje rekord tabeli produktów, w której wartość identyfikatora wynosi 3 po wykonaniu.

# Utwórz lub zastąp funkcję funkcji1 ()
Zwraca pustkę jako
$$
ZACZYNAĆ
--Zaktualizuj wartość cenową trzeciego rekordu
Zaktualizuj Produkty Ustaw cenę = 1500 gdzie id = 3;
KONIEC;
$$
Język „plpgsql”;

Następujące dane wyjściowe pojawi się, jeśli funkcja zostanie utworzona pomyślnie w Postgres Baza danych.

Uruchom następującą instrukcję SQL, aby przeczytać wszystkie rekordy produkty tabela przed wykonaniem funkcja1 ().

# Wybierz * z produktów;

Poniższe dane wyjściowe pokazuje wstawione rekordy produkty tabela.

Uruchom następującą instrukcję SQL, aby wykonać funkcję.

# Wybierz funkcję1 ();


Poniższe wyjście pokazuje, że wywołanie funkcji wpływa na jeden wiersz funkcja1 (). Wartość pola cenowego tabeli zostanie zaktualizowana, gdy wartość identyfikatora wynosi 3.

Uruchom następującą instrukcję SQL, aby przeczytać wszystkie rekordy produkty Tabela po wykonaniu funkcja1 ().

# Wybierz * z produktów;

Poniższe dane wyjściowe pokazuje, że wartość cenowa tabeli produktów została zaktualizowana, gdzie wartość identyfikacyjna wynosi 3, a teraz wynosi 1500.

Przykład-2: funkcja zdefiniowana przez użytkownika z argumentem

Domyślny argument funkcji jest argument. Uruchom następującą instrukcję SQL, aby utworzyć funkcję o nazwie funkcja2 () z dwoma argumentami, a funkcja nic nie zwróci. Funkcja wstawię nowy rekord do produkty Tabela z wartościami argumentów.

# Utwórz lub zastąp funkcję funkcji2 (nazwa varchar, typ varchar, cena int)
Zwraca pustkę jako
$$
ZACZYNAĆ
--Wstawić nowy rekord
Wstaw do produktów (nazwa, typ, cena)
Wartości (nazwa, typ, cena);
KONIEC;
$$
Język „plpgsql”;


Następujące dane wyjściowe pojawi się, jeśli funkcja zostanie utworzona pomyślnie w Postgres Baza danych.

Uruchom następującą instrukcję SQL, aby wykonać funkcję trzy w wartościach argumentów. Są to „iPhone”, „Mobile” i 2000.

# Wybierz funkcję2 („iPhone”, „Mobile”, 2000);

Poniższe wyjście pokazuje, że wywołanie funkcji wpływa na jeden wiersz funkcja2 (), a nowy rekord zostanie włożony do tabeli.

Uruchom następującą instrukcję SQL, aby przeczytać wszystkie rekordy produkty Tabela po wykonaniu funkcja2 ().

# Wybierz * z produktów;

Poniższe dane wyjściowe pokazuje, że nowy rekord został włożony do produkty tabela.

Przykład-3: funkcja zdefiniowana przez użytkownika bez argumentu

Argument na zewnątrz służy do zwrócenia wartości z funkcji. Uruchom następującą instrukcję SQL, aby utworzyć funkcję o nazwie funkcja3 () z jednym argumentem typu pieniędzy, a funkcja zwróci dane typu pieniędzy. Funkcja zwróci przypisaną wartość argumentu na zewnątrz.

# Utwórz lub zastąp funkcję funkcji3 (cena pieniądze)
Zwraca pieniądze jako
$$
ZACZYNAĆ
--Przypisz wartość do argumentu
Cena: = 1000;
KONIEC;
$$
Język „plpgsql”;


Następujące dane wyjściowe pojawi się, jeśli funkcja zostanie utworzona pomyślnie w Postgres Baza danych.

Uruchom następującą instrukcję SQL, aby usunąć rekordy z tabeli produktów na podstawie wartości zwróconej przez funkcję3 ().

# Usuń z produktów, w których cena <= function3();


Poniższe dane wyjściowe pokazuje, że wywołanie funkcji wpływa trzy wiersze funkcja3 (). Zwrócona wartość funkcji wynosi 1000, która pasuje do trzech rekordów produkty stół, gdzie ID Wartości są 1, 2, I 4.

Uruchom następującą instrukcję SQL, aby przeczytać wszystkie rekordy produkty Tabela po wykonaniu funkcja3 (). Wyjście pokazuje, że w tabeli istnieją dwie rekordy, w której cena Wartości są ponad 1000.

# Wybierz * z produktów;

Poniższe dane wyjściowe pokazuje, że 3 rekordy zostały usunięte z produkty tabela.

Przykład-4: Funkcja zdefiniowana przez użytkownika z argumentem Inout

Argument inout jest używany w funkcji do przekazywania wartości do funkcji i zwracania wartości z funkcji. Uruchom następującą instrukcję SQL, aby utworzyć funkcję o nazwie Oblicz() z argumentem typu zmiennoprzecinkowego i argumentem typu liczb całkowitych. Funkcja zwróci dane typu zmiennoprzecinkowego. Funkcja zostanie wykonana z kwotą sprzedaży, która będzie wartością zmiennoprzecinkową, a zniżką, która będzie liczbą całkowitą. Kwota sprzedaży po zniżce zostanie obliczona na podstawie wartości argumentów. Następnie obliczona kwota sprzedaży zostanie zwrócona z funkcji za pomocą argumentu Out.

# Utwórz lub wymień funkcję oblicz (
sales_amount inout float, rabat int)
Zwraca float jako
$$
ZACZYNAĆ
--Oblicz kwotę rabatową
sales_amount: = sales_amount - (sales_amount*rabat/100);
KONIEC;
$$
Język „plpgsql”;

Następujące dane wyjściowe pojawi się, jeśli funkcja zostanie utworzona pomyślnie w Postgres Baza danych.

Uruchom następującą instrukcję, aby wykonać funkcję ze 10000 jako kwota sprzedaży i 5 jako kwota rabatowa

#Select Oblicz (10000, 5) jako rabat_amount;

5% 10000 jest 500 i 10000-500 = 9500. Następujące wyniki pokazuje kwotę sprzedaży po 5% zniżce.

Przykład-5: Użytkownik-DEffined Funkcja z Instrukcja warunkowa

Uruchom następującą instrukcję SQL, aby utworzyć funkcję o nazwie Search_product () z argumentem, a funkcja zwróci dane typu varchar. W tej funkcji pokazano sposób deklarowania zmiennej funkcji i korzystania z instrukcji warunkowej. Zmienna funkcyjna wymieniona Nazwa produktu został zdefiniowany z Nazwa rodzaj produkty tabela. Wartość argumentu, TP, będzie dopasowany do wartości typ pole produkty tabela. Jeśli w tabeli nie zostanie znalezione dopasowanie, wówczas komunikat zostanie podniesiony błąd: „Typ produktu nie istnieje”. Jeśli znaleziono jakikolwiek dopasowanie, to wartość Nazwa pole tego rodzaju produktu będzie przechowywane w zmiennej funkcji, a zmienna zostanie zwrócona z funkcji.

# Utwórz lub wymień funkcję wyszukiwania_product (TP varchar)
Zwraca varchar as
$$
OGŁOSIĆ
Produkty Product_name.Nazwa%typ;
ZACZYNAĆ
-- Wyszukaj nazwę produktu na podstawie typu
Wybierz nazwę na nazwę produktu
Z produktów
Gdzie produkty.Typ = tp;
Jeśli nie znaleziono, to
Podnieś typ produktu nie istnieje.';;
Zakończyć, jeśli;
Zwrot_name produktu;
KONIEC;
$$
Język „plpgsql”;

Następujące dane wyjściowe pojawi się, jeśli funkcja zostanie utworzona pomyślnie w Postgres Baza danych.

Uruchom następującą instrukcję SQL, aby przeczytać wszystkie rekordy z tabeli produktów.

# Wybierz * z produktów;

Uruchom następującą instrukcję SQL, aby wykonać funkcję Search_Product () z typem produktu „mobilny".

# Wybierz Search_Product („Mobile”);

Uruchom następującą instrukcję SQL, aby wykonać funkcję Search_Product () z typem produktu „AC".

# Wybierz Search_Product („AC”);

Następujące dane wyjściowe pokazuje, że produkty Tabela zawiera dwa rekordy wartości typu, „telewizja" I "mobilny". Wyjście pierwszego wykonywania funkcji zwróciło „iPhon”, ponieważ typ produktu „Mobile” istnieje w tabeli. Wyjście drugiego wykonywania funkcji zwróciło komunikat o błędzie, ponieważ typ produktu „AC” nie istnieje w tabeli.

Przykład-6: Funkcja zdefiniowana przez użytkownika z funkcją agregowaną

Każda funkcja zagregowana obsługiwana przez SQL może być używana w funkcji PostgreSQL. Uruchom następującą instrukcję SQL, aby utworzyć funkcję o nazwie count_product () bez żadnego argumentu, a funkcja zwróci dane typu liczb całkowitych. Funkcja agregująca liczba () została użyta w funkcji, która jest używana do zliczenia liczby wierszy na podstawie określonego warunku. Tutaj zmienna funkcyjna o nazwie Total_Product została zadeklarowana w funkcji, aby przechowywać wartość zwracaną funkcji Count (). Funkcja Count () została użyta w zapytaniu Select, aby policzyć te rekordy, w których nazwa produktu zaczyna się od słowa „Sony”.

# Utwórz lub zastąp funkcję Count_Product ()
Zwraca int as
$$
OGŁOSIĆ
total_product int;
ZACZYNAĆ
--Policz całkowitą liczbę konkretnego produktu
Wybierz liczbę (*) do total_product z produktów
Gdzie nazwa jak „Sony%”;
Return total_product;
KONIEC;
$$
Język PLPGSQL;

Następujące dane wyjściowe pojawi się, jeśli funkcja zostanie utworzona pomyślnie w Postgres Baza danych.

Uruchom następujące polecenie, aby wykonać funkcję, count_product ().

# Wybierz hrabia_product ();

Poniższe wyjście pokazuje, że funkcja Count () zwraca wartość 1, ponieważ istnieje tylko jeden rekord, który pasuje do wartości, „Sony”.

Wniosek

Cel stosowania funkcji PostgreSQL i różnych sposobów korzystania z funkcji PostgreSQL z argumentami IN, OUT i inout zostały opisane w tym samouczku poprzez tworzenie wielu funkcji PostgreSQL. Argument IN służy do przeniesienia wartości do funkcji. Argument na zewnątrz służy do zwrócenia wartości z funkcji. Argument Inout służy do przeniesienia wartości wejściowej do funkcji i zwracania wyjścia z funkcji. Funkcję można również utworzyć bez żadnego argumentu. Mam nadzieję, że użytkownik będzie mógł poprawnie utworzyć i używać funkcji PostgreSQL.