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)