L3 Info : SGBD
 
◃  Ch. 11 PL/pgSQL  ▹
 

Fonctions tables (en SQL)

  • Il est possible de définir des fonctions dont le résultat correspond à un ensemble de lignes provenant d'une table ou d'une vue.
  • Le type de retour de ces fonctions est SETOF nomTable.
  • La fonction peut être utilisée dans la clause FROM d'une requête ! (alias optionnel)
  • Exemple :
    CREATE FUNCTION selectTitres(varchar) RETURNS SETOF livre AS $$
        SELECT * FROM livre WHERE liv_titre like $1;
    $$ LANGUAGE SQL;
    
    SELECT * FROM selectTitres('Les %') AS t1;
    +-------+---------------------------------+--------------+
    |liv_num|liv_titre                        |liv_depotlegal|
    +-------+---------------------------------+--------------+
    |3      |Les Mutants                      |null          |
    |6      |Les Courants de l'Espace         |null          |
    |8      |Les Hommes Stellaires            |null          |
    |9      |Les Planètes meurent aussi       |null          |
    |13     |Les Fleurs de Février            |null          |
    |17     |Les Maîtres du Hasard            |null          |
    |23     |Les cavernes de l'Id             |null          |
    |28     |Les marteaux de Vulcain          |null          |
    |29     |Les Planètes en Sursis           |null          |
    |30     |Les dieux verts                  |null          |
    |38     |Les lumières                     |null          |
    |41     |Les chaînes de l'avenir          |null          |
    |46     |Les Doigts du Hasard             |null          |
    |47     |Les rats                         |null          |
    |50     |Les Voix de Skaith               |null          |
    |58     |Les enfants de Sturgeon          |null          |
    |64     |Les Hommes de Poche              |null          |
    |67     |Les Champs de l'Infini           |null          |
    |69     |Les immortels                    |null          |
    |70     |Les mondes interdits             |null          |
    |72     |Les anges de la colère           |null          |
    |74     |Les joueurs de Titan             |null          |
    |86     |Les fracassés                    |null          |
    |87     |Les domaines de Koryphon         |null          |
    |88     |Les furies                       |null          |
    |90     |Les yeux d'Heisenberg            |null          |
    |92     |Les racines du passé             |null          |
    |96     |Les pillards de Skaith           |null          |
    |102    |Les yeux d'ambre                 |null          |
    |114    |Les baladins de la Planète Géante|null          |
    +-------+---------------------------------+--------------+
    
  • Elles s'utilisent ensuite comme des tables ou des vues.
  • Il est également possible de retourner une table créée dynamiquement avec le type de retour TABLE(cols)
  • Exemple :
    CREATE OR REPLACE FUNCTION selectTitres(debut int, fin int)
              RETURNS TABLE(numero int, titre VARCHAR) AS $$
        SELECT liv_num, liv_titre FROM livre WHERE liv_num BETWEEN $1 AND $2;
    $$ LANGUAGE SQL;
    
    SELECT * FROM selectTitres(1,5) AS t1;
    +------+------------------------+
    |numero|titre                   |
    +------+------------------------+
    |1     |Le Cerveau Solitaire    |
    |2     |Le Voyageur de l'Inconnu|
    |3     |Les Mutants             |
    |4     |La Galaxie Noire        |
    |5     |La Route étoilée        |
    +------+------------------------+