Aller au contenu

Les procédures et les fonctions PL/PGSQL

Vous avez sûrement déjà entendu parler des procédures stockées, et nous y sommes enfin. Ces éléments sont essentiels pour organiser vos scripts en sous-programmes. Dans ce module, explorons les détails des procédures et des fonctions PL/PGSQL.

Les procédures et les fonctions sont des sous-programmes. Les fonctions retournent un résultat tandis que les procédures ne retournent rien.

Procédures

Une procédure est un sous-programme qui permet

Exemple de procédure PL/PGSQL
drop procedure if exists public.sp_example_procedure(date);

create or replace procedure public.sp_example_procedure(rundt date) 
as
$$
begin
    raise notice 'rundt : %', rundt;

    --- Bloc Instructions 1 ---

    --- Bloc Instructions 2 ---

    --- Bloc Instructions 3 ---

end;
$$ language plpgsql;
Dans un bloc transactionel, la fonction est appelée grâce au mot clé perform comme ceci

call public.sp_example_procedure('2022-12-01'::date);

Fonctions

Contrairement à une procédure, une fonction retourne un résultat qui peut être récupéré dans une variable.

Exemple de fonction PL/PGSQL
drop function if exists public.fn_example_function(date);

create or replace function public.fn_example_function(rundt date) 
returns character varying
as
$$
begin
    raise notice 'rundt : %', rundt;

    --- Bloc Instructions 1 ---

    --- Bloc Instructions 2 ---

    --- Bloc Instructions 3 ---

    return 'Y';
end;
$$ language plpgsql;

Dans un bloc transactionel, la fonction est appelée grâce au mot clé perform comme ceci

perform public.fn_example_function('2022-12-01'::date);

Extract Transform Load

Les procédures et les fonctions sont utlisées pour implémenter des logiques ETL

Exemple de fonction PL/PGSQL
drop function if exists public.fn_example_etl(date);

create or replace function public.fn_example_etl(rundt date) returns character varying
as
$$
begin
    raise notice 'rundt : %', rundt;

    --- BLOCK 1 : EXTRACT ---
    drop table if exists public.tmp_orders_day;
    create temp table public.tmp_orders_day as (
        ----
        ----
        ----
    );

    --- BLOCK 2 : TRANSFORM ---
    ----
    ----
    ----

    --- BLOCK 3 : LOAD ---
    delete from edw.example_reporting_table where dt = rundt;
    insert into edw.example_reporting_table (
        ----
        ----
        ----
    );

    return 'Y';
end;
$$ language plpgsql;

Procédure vs Fonction

La principale différence réside dans la gestion des sorties :

  • Procédures : utilisées pour exécuter des actions, sans nécessairement retourner de résultat.
  • Fonctions : conçues pour effectuer un calcul et retourner une valeur
# Procédure Fonction
Éntrée Oui Oui
Sortie Non (directement, mais possible via OUT) Oui (retourne une valeur explicite)
Utilisation Actions complexes, mises à jour, traitements multiples Calculs spécifiques, transformation des données
Appel dans SQL Ne peut pas être utilisée dans une requête SQL Peut être utilisée dans une requête SQL
Modification Peut modifier les données (DML autorisé) Généralement non (DML limité)

Les procédures et les fonctions sont utilisées pour mettre en œuvre des logiques ETL, faisant d'elles des éléments cruciaux dans le domaine de la gestion de bases de données. Explorez davantage ces fonctionnalités pour optimiser vos projets.