Suche…


Bemerkungen

PL / pgSQL ist eine in PostgreSQL integrierte Programmiersprache zum Schreiben von Funktionen, die in der Datenbank selbst ausgeführt werden und in anderen Datenbanken als gespeicherte Prozeduren bezeichnet werden. Es erweitert SQL um Schleifen, Bedingungen und Rückgabetypen. Obwohl die Syntax für viele Entwickler ungewöhnlich ist, ist sie viel schneller als alles, was auf dem Anwendungsserver ausgeführt wird, da der Verbindungsaufwand für die Verbindung zur Datenbank entfällt. Dies ist besonders nützlich, wenn Sie andernfalls eine Abfrage ausführen müssen. Warten Sie auf das Ergebnis. und senden Sie eine weitere Abfrage.

Obwohl es viele andere prozedurale Sprachen für PostgreSQL gibt, wie PL / Python, PL / Perl und PLV8, ist PL / pgSQL ein allgemeiner Ausgangspunkt für Entwickler, die ihre erste PostgreSQL-Funktion schreiben möchten, da ihre Syntax auf SQL basiert. Es ist auch ähnlich zu PL / SQL, der muttersprachlichen Verfahrenssprache von Oracle, so dass jeder, der sich mit PL / SQL auskennt, die Sprache als bekannt kennt und jeder Entwickler, der beabsichtigt, Oracle-Anwendungen in der Zukunft zu entwickeln, aber mit einer freien Datenbank beginnen möchte, den Übergang vornehmen kann von PL / pgSQL zu PL / SQL relativ einfach.

Es sollte betont werden, dass andere prozedurale Sprachen existieren und PL / pgSQL ihnen in keiner Weise überlegen ist, einschließlich der Geschwindigkeit. Beispiele in PL / pgSQL können jedoch als allgemeiner Bezugspunkt für andere Sprachen dienen, die zum Schreiben von PostgreSQL-Funktionen verwendet werden. PL / pgSQL bietet die meisten Tutorials und Bücher aller PLs und kann ein Sprungbrett für das Erlernen der Sprachen mit weniger Dokumentation sein.

Hier sind Links zu einigen kostenlosen Handbüchern und Büchern zu PL / pgSQL:

Grundlegende PL / pgSQL-Funktion

Eine einfache PL / pgSQL-Funktion:

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;

Dies hätte nur mit der SQL-Anweisung erreicht werden können, zeigt aber die grundlegende Struktur einer Funktion.

Um die Funktion auszuführen, machen Sie:

select active_subscribers();

PL / pgSQL-Syntax

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;

RÜCKGABE Block

Optionen für die Rückgabe in einer PL / pgSQL-Funktion:

benutzerdefinierte Ausnahmen

Benutzerdefinierte Ausnahme 'P2222' erstellen:

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
;

Benutzerdefinierte Ausnahme erstellen, die kein Errm zuweist:

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

Berufung:

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

hier wurde das benutzerdefinierte P0001 verarbeitet, und P2222 nicht, die Ausführung wurde abgebrochen.

Es ist auch sehr sinnvoll, eine Tabelle mit Ausnahmen zu führen, wie hier: http://stackoverflow.com/a/2700312/5315974



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow