Ricerca…


Osservazioni

PL / pgSQL è il linguaggio di programmazione incorporato di PostgreSQL per la scrittura di funzioni eseguite all'interno del database stesso, note come stored procedure in altri database. Estende SQL con loop, condizionali e tipi di ritorno. Anche se la sua sintassi può sembrare strana per molti sviluppatori, è molto più veloce di qualsiasi altra esecuzione sul server delle applicazioni, poiché l'overhead della connessione al database viene eliminato, il che è particolarmente utile quando altrimenti bisognerebbe eseguire una query, attendere il risultato, e invia un'altra query.

Sebbene esistano molti altri linguaggi procedurali per PostgreSQL, come PL / Python, PL / Perl e PLV8, PL / pgSQL è un punto di partenza comune per gli sviluppatori che desiderano scrivere la loro prima funzione PostgreSQL perché la sua sintassi si basa su SQL. È anche simile a PL / SQL, linguaggio procedurale nativo di Oracle, quindi qualsiasi sviluppatore che abbia familiarità con PL / SQL troverà familiare la lingua, e qualsiasi sviluppatore che intenda sviluppare applicazioni Oracle in futuro ma che vuole iniziare con un database gratuito può effettuare la transizione da PL / pgSQL a PL / SQL con relativa facilità.

Va sottolineato che esistono altri linguaggi procedurali e PL / pgSQL non è necessariamente superiore a loro in alcun modo, inclusa la velocità, ma gli esempi in PL / pgSQL possono fungere da punto di riferimento comune per altri linguaggi utilizzati per scrivere le funzioni di PostgreSQL. PL / pgSQL ha il maggior numero di tutorial e libri di tutti i PL e può essere un trampolino di lancio per imparare le lingue con meno documentazione.

Ecco i link ad alcune guide gratuite e libri su PL / pgSQL:

Funzione PL / pgSQL di base

Una semplice funzione 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;

Questo potrebbe essere stato ottenuto solo con l'istruzione SQL ma dimostra la struttura di base di una funzione.

Per eseguire la funzione fai:

select active_subscribers();

Sintassi 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;

RETURNS Block

Opzioni per il ritorno in una funzione PL / pgSQL:

eccezioni personalizzate

creando un'eccezione personalizzata '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
;

creazione di un'eccezione personalizzata che non assegna errm:

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

chiamata:

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

qui viene elaborato P0001 personalizzato e P2222 no, interrompendo l'esecuzione.

Inoltre ha molto senso tenere una tabella di eccezioni, come qui: http://stackoverflow.com/a/2700312/5315974



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow