Sök…


Anmärkningar

PL / pgSQL är PostgreSQLs inbyggda programmeringsspråk för skrivfunktioner som körs i själva databasen, känd som lagrade procedurer i andra databaser. Den utökar SQL med slingor, konditioner och returtyper. Även om syntaxen kan vara konstig för många utvecklare är den mycket snabbare än någonting som körs på applikationsservern eftersom anslutningen till databasen elimineras, vilket är särskilt användbart när du annars skulle behöva utföra en fråga, vänta på resultatet, och skicka in en ny fråga.

Även om många andra processuella språk finns för PostgreSQL, som PL / Python, PL / Perl och PLV8, är PL / pgSQL en vanlig utgångspunkt för utvecklare som vill skriva sin första PostgreSQL-funktion eftersom dess syntax bygger på SQL. Det liknar också PL / SQL, Oracle's ursprungliga procedurspråk, så alla utvecklare som är bekanta med PL / SQL kommer att hitta språket som är bekant, och alla utvecklare som avser att utveckla Oracle-applikationer i framtiden men vill börja med en gratis databas kan övergå från PL / pgSQL till PL / SQL med relativt enkelhet.

Det bör betonas att andra processuella språk finns och PL / pgSQL inte nödvändigtvis är överlägsen dem på något sätt, inklusive hastighet, men exempel i PL / pgSQL kan fungera som en gemensam referenspunkt för andra språk som används för att skriva PostgreSQL-funktioner. PL / pgSQL har flest tutorials och böcker för alla PL: er och kan vara en språngbräda för att lära sig språken med mindre dokumentation.

Här är länkar till några gratis guider och böcker om PL / pgSQL:

Grundläggande PL / pgSQL-funktion

En enkel 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;

Detta kunde ha uppnåtts med bara SQL-uttalandet men visar den grundläggande strukturen för en funktion.

För att utföra funktionen gör du:

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;

RETURNS Block

Alternativ för att återvända i en PL / pgSQL-funktion:

anpassade undantag

skapar anpassat undantag '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
;

skapa anpassat undantag, inte tilldela errm:

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

kallelse:

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

här anpassade P0001 och P2222, inte, avbryter exekveringen.

Det är också väldigt vettigt att hålla en tabell med undantag, som här: http://stackoverflow.com/a/2700312/5315974



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow