Szukaj…


Uwagi

PL / pgSQL to wbudowany język programowania PostgreSQL do pisania funkcji działających w samej bazie danych, zwanych procedurami przechowywanymi w innych bazach danych. Rozszerza SQL o pętle, warunki warunkowe i typy zwracane. Chociaż jego składnia może być dziwna dla wielu programistów, jest znacznie szybsza niż cokolwiek działającego na serwerze aplikacji, ponieważ eliminuje się narzut związany z łączeniem się z bazą danych, co jest szczególnie przydatne, gdy w innym przypadku konieczne byłoby wykonanie zapytania, czekanie na wynik, i prześlij kolejne zapytanie.

Chociaż istnieje wiele innych języków proceduralnych dla PostgreSQL, takich jak PL / Python, PL / Perl i PLV8, PL / pgSQL jest częstym punktem wyjścia dla programistów, którzy chcą napisać swoją pierwszą funkcję PostgreSQL, ponieważ jej składnia opiera się na SQL. Jest również podobny do PL / SQL, natywnego języka procedury Oracle, więc każdy programista zaznajomiony z PL / SQL znał ten język, a każdy programista, który zamierza opracować aplikacje Oracle w przyszłości, ale chce zacząć od darmowej bazy danych, może przejść z PL / pgSQL na PL / SQL ze względną łatwością.

Należy podkreślić, że istnieją inne języki proceduralne i PL / pgSQL niekoniecznie przewyższa je w jakikolwiek sposób, w tym szybkość, ale przykłady w PL / pgSQL mogą służyć jako wspólny punkt odniesienia dla innych języków używanych do pisania funkcji PostgreSQL. PL / pgSQL zawiera najwięcej samouczków i książek ze wszystkich PL i może być odskocznią do nauki języków z mniejszą ilością dokumentacji.

Oto linki do niektórych bezpłatnych przewodników i książek na temat PL / pgSQL:

Podstawowa funkcja PL / pgSQL

Prosta funkcja PL / pgSQL:

CREATE FUNCTION active_subscribers() RETURNS bigint AS $$
DECLARE
    -- variable for the following BEGIN ... END block
    subscribers integer;
BEGIN
    -- SELECT must always be used with INTO
    SELECT COUNT(user_id) INTO subscribers FROM users WHERE subscribed;
    -- function result
    RETURN subscribers;
EXCEPTION
    -- return NULL if table "users" does not exist
    WHEN undefined_table
    THEN RETURN NULL;
END;
$$ LANGUAGE plpgsql;

Można to osiągnąć za pomocą samej instrukcji SQL, ale pokazuje ona podstawową strukturę funkcji.

Aby wykonać funkcję:

select active_subscribers();

Składnia PL / pgSQL

CREATE [OR REPLACE] FUNCTION functionName (someParameter 'parameterType') 
RETURNS 'DATATYPE'
AS $_block_name_$
DECLARE
    --declare something
BEGIN
    --do something
    --return something
END;
$_block_name_$
LANGUAGE plpgsql;

ZWRACA Blok

Opcje zwracania w funkcji PL / pgSQL:

niestandardowe wyjątki

tworzenie niestandardowego wyjątku „P2222”:

create or replace function s164() returns void as
$$
begin
raise exception using message = 'S 164', detail = 'D 164', hint = 'H 164', errcode = 'P2222';
end;
$$ language plpgsql
;

tworzenie niestandardowego wyjątku bez przypisywania errm:

create or replace function s165() returns void as
$$
begin
raise exception '%','nothing specified';
end;
$$ language plpgsql
;

powołanie:

t=# do
$$
declare
 _t text;
begin
  perform s165();
  exception when SQLSTATE 'P0001' then raise info '%','state P0001 caught: '||SQLERRM;
  perform s164();

end;
$$
;
INFO:  state P0001 caught: nothing specified
ERROR:  S 164
DETAIL:  D 164
HINT:  H 164
CONTEXT:  SQL statement "SELECT s164()"
PL/pgSQL function inline_code_block line 7 at PERFORM

tutaj niestandardowe P0001 przetworzone, a P2222, nie, przerywanie wykonania.

Bardzo sensowne jest także utrzymywanie tabeli wyjątków, na przykład tutaj: http://stackoverflow.com/a/2700312/5315974



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow