PostgreSQL - Funkcje
PostgreSQL functions, znane również jako procedury składowane, umożliwiają wykonywanie operacji, które normalnie wymagałyby kilku zapytań i podróży w obie strony w ramach jednej funkcji w bazie danych. Funkcje umożliwiają ponowne użycie bazy danych, ponieważ inne aplikacje mogą współdziałać bezpośrednio z procedurami składowanymi zamiast z warstwą środkową lub duplikującym kodem.
Funkcje można tworzyć w dowolnym języku, takim jak SQL, PL / pgSQL, C, Python itp.
Składnia
Podstawowa składnia tworzenia funkcji jest następująca -
CREATE [OR REPLACE] FUNCTION function_name (arguments)
RETURNS return_datatype AS $variable_name$
DECLARE
declaration;
[...]
BEGIN
< function_body >
[...]
RETURN { variable_name | value }
END; LANGUAGE plpgsql;
Gdzie,
function-name określa nazwę funkcji.
Opcja [OR REPLACE] pozwala na modyfikację istniejącej funkcji.
Funkcja musi zawierać return komunikat.
RETURNklauzula określa typ danych, które mają zostać zwrócone z funkcji. Plikreturn_datatype może być typem podstawowym, złożonym lub dziedzinowym albo może odnosić się do typu kolumny tabeli.
function-body zawiera część wykonywalną.
Słowo kluczowe AS służy do tworzenia samodzielnej funkcji.
plpgsqlto nazwa języka, w którym funkcja jest zaimplementowana. Tutaj używamy tej opcji dla PostgreSQL, może to być SQL, C, język wewnętrzny lub nazwa języka proceduralnego zdefiniowanego przez użytkownika. W celu zachowania zgodności z poprzednimi wersjami nazwę można ująć w apostrofy.
Przykład
Poniższy przykład ilustruje tworzenie i wywoływanie funkcji autonomicznej. Ta funkcja zwraca całkowitą liczbę rekordów w tabeli COMPANY. Skorzystamy z tabeli COMPANY , która zawiera następujące rekordy -
testdb# select * from COMPANY;
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
(7 rows)
Funkcja totalRecords () jest następująca -
CREATE OR REPLACE FUNCTION totalRecords ()
RETURNS integer AS $total$
declare
total integer;
BEGIN
SELECT count(*) into total FROM COMPANY;
RETURN total;
END;
$total$ LANGUAGE plpgsql;
Gdy powyższe zapytanie zostanie wykonane, wynikiem będzie -
testdb# CREATE FUNCTION
Teraz wywołajmy tę funkcję i sprawdźmy rekordy w tabeli COMPANY
testdb=# select totalRecords();
Gdy powyższe zapytanie zostanie wykonane, wynikiem będzie -
totalrecords
--------------
7
(1 row)