Previous Up Next
Université Lille 3-Charles de GaulleUFR de Mathématiques Sciences Économiques et Sociales

Chapitre 51  Astuces pour développer en PL/pgSQL

51.1  Utilisez un éditeurs de texte !

Un bon moyen de développer en PL/pgSQL est d'utiliser l'éditeur de texte de votre choix pour créer vos fonctions, et d'utiliser psql dans une autre fenêtre pour charger et tester ces fonctions. Si vous procédez ainsi, une bonne idée est d'écrire la fonction en utilisant CREATE OR REPLACE FUNCTION. De cette façon vous pouvez recharger le fichier seulement pour mettre à jour la définition de la fonction. Par exemple :
CREATE OR REPLACE FUNCTION testfunc(integer) RETURNS integer AS '
          ....
end;
' LANGUAGE plpgsql;
Pendant que psql tourne, vous pouvez charger ou recharger de telles définitions de fonction avec :
\i filename.sql
et alors immédiatement soumettre des commandes SQL pour tester la fonction.

51.2  pgaccess

Un autre bon moyen de développer en PL/pgSQL est d'utiliser un outil d'accès à la base de données muni d'une interface graphique qui facilite le développement dans un langage procédural. Un exemple d'un tel outil est PgAccess, bien que d'autres existent. Ces outils fournissent souvent des fonctionnalités pratiques telles que la détection des guillemets ouverts et facilitent la re-création et le débuggage des fonctions.

51.3  Utilisation des guillemets simples (quotes)

Puisque le code d'une fonction PL/pgSQL est spécifié dans la commande CREATE FUNCTION comme une chaîne de caractères, chaque guillemet simple (quote) à l'intérieur de la fonction doit être précédé d'un autre guillemet simple (caractère d'échappement). Ceci peut conduire parfois à un code assez compliqué, surtout si vous écrivez une fonction générant d'autres fonctions. Ce tableau peut être utile comme résumé du nombre de quotes nécessaire dans diverses situations.
1 guillemet simple
 
Pour commencer et terminer le corps de la fonction, par exemple :
CREATE FUNCTION foo() RETURNS integer AS '...'
    LANGUAGE plpgsql;
Partout au sein du corps de la fonction, les guillemets simples doivent aller par paires.
2 guillemets simples
 
Pour les chaînes de caractères à l'intérieur du corps de la fonction, par exemple :
a_output := ''Blah'';
SELECT * FROM users WHERE f_name=''foobar'';
4 guillemets simples
 
Quand vous avez besoin d'un guillemet simple dans une chaîne constante à l'interieur du corps de la fonction, par exemple :
a_output := a_output || '' AND name LIKE ''''foobar'''' AND xyz''
La valeur effectivement concaténée à a_output est : AND name LIKE 'foobar' AND xyz.
6 guillemets simples
 
Quand un simple guillemet dans une chaîne à l'intérieur du corps d'une fonction est adjacent à la fin de cette chaîne constante, par exemple :
a_output := a_output || '' AND name LIKE ''''foobar''''''
La valeur effectivement concaténée à a_output est alors : AND name LIKE 'foobar'.
10 guillemets simples
 
Lorsque vous voulez 2 guillemets simples dans une chaîne constante (qui compte pour 8 guillemets simples) et qu'elle est adjacente à la fin de cette chaîne constante (2 de plus). Vous n'aurez probablement besoin de ceci que si vous écrivez une fonction qui génère d'autres fonctions. Par exemple :
a_output := a_output || '' if v_'' ||
    referrer_keys.kind || '' like ''''''''''
    || referrer_keys.key_string || ''''''''''
    then return ''''''  || referrer_keys.referrer_type
    || ''''''; end if;'';
La valeur de a_output sera alors :
if v_... like ''...'' then return ''...''; end if;
Une approche différente est d'échapper les guillemets du corps de la fonction avec un backslash plutôt qu'en les doublant. Avec cette méthode, vous vous verrez écrire des choses telles que \'\' au lieu de ''''. Certains trouveront ceci plus lisible, d'autres non.

D.Gonzalez (gonzalez@univ-lille3.fr) en date du th , 

Previous Up Next