Recherche…


Remarques

PL / pgSQL est le langage de programmation intégré de PostgreSQL pour l'écriture de fonctions qui s'exécutent dans la base de données elle-même, connue sous le nom de procédures stockées dans d'autres bases de données. Il étend SQL avec des boucles, des conditions et des types de retour. Bien que sa syntaxe puisse être étrange pour de nombreux développeurs, elle est beaucoup plus rapide que tout ce qui s'exécute sur le serveur d’application, car la surcharge de connexion à la base de données est éliminée, ce qui est particulièrement utile lorsque vous devez exécuter une requête. et soumettre une autre requête.

Bien que de nombreux autres langages procéduraux existent pour PostgreSQL, tels que PL / Python, PL / Perl et PLV8, PL / pgSQL est un point de départ commun pour les développeurs souhaitant écrire leur première fonction PostgreSQL car sa syntaxe est basée sur SQL. Il est également similaire à PL / SQL, le langage procédural natif d’Oracle, donc tout développeur familier avec PL / SQL trouvera le langage familier, et tout développeur qui a l’intention de développer des applications Oracle à l’avenir de PL / pgSQL à PL / SQL avec une relative facilité.

Il convient de souligner que d'autres langages procéduraux existent et que PL / pgSQL ne leur est pas nécessairement supérieur, y compris la vitesse, mais des exemples dans PL / pgSQL peuvent servir de point de référence commun pour d'autres langages utilisés pour écrire des fonctions PostgreSQL. PL / pgSQL a le plus de tutoriels et de livres de tous les PL et peut être un tremplin pour apprendre les langues avec moins de documentation.

Voici des liens vers des guides et des livres gratuits sur PL / pgSQL:

Fonction de base PL / pgSQL

Une simple fonction 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;

Cela aurait pu être réalisé avec juste l'instruction SQL mais montre la structure de base d'une fonction.

Pour exécuter la fonction, faites:

select active_subscribers();

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

RETOURS Bloc

Options pour retourner dans une fonction PL / pgSQL:

exceptions personnalisées

créer une exception personnalisée '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
;

créer une exception personnalisée n'attribuant pas d'erreur:

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

appel:

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

ici personnalisé P0001 traité, et P2222, non, abandonnant l'exécution.

Il est également très logique de conserver un tableau des exceptions, comme ici: http://stackoverflow.com/a/2700312/5315974



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow