Documentation PostgreSQL 8.0.25 | ||||
---|---|---|---|---|
Pr�c�dent | Arri�re rapide | Chapitre 36. PL/Tcl - Langage de proc�dures Tcl | Avance rapide | Suivant |
Pour cr�er une fonction dans le langage PL/Tcl, utilisez la syntaxe standard :
CREATE FUNCTION nom_fonction (types_arguments) RETURNS type_en_retour AS $$ # corps de la fonction PL/Tcl $$ LANGUAGE pltcl;
PL/TclU est identique sauf que le langage doit �tre pltclu.
Le corps de la fonction est simplement un bout de script Tcl. Quand la fonction est appel�e, les valeurs des arguments sont pass�es en tant que variables $1 ... $n au script Tcl. Le r�sultat est renvoy� � partir du code Tcl de la fa�on habituelle avec une instruction return.
Par exemple, une fonction renvoyant le plus grand de deux valeurs enti�res pourrait �tre d�finie ainsi :
CREATE FUNCTION tcl_max(integer, integer) RETURNS integer AS $$ if {$1 > $2} {return $1} return $2 $$ LANGUAGE pltcl STRICT;
Notez la clause STRICT qui nous permet d'�viter de penser aux valeurs NULL en entr�es : si une valeur NULL est pass�e, la fonction ne sera pas appel�e du tout mais renverra automatiquement un r�sultat nul.
Dans une fonction non stricte, si la valeur r�elle d'un argument est
NULL, la variable $n
correspondante sera initialis�e avec une cha�ne vide. Pour d�tecter si un
argument particulier est NULL, utilisez la fonction argisnull.
Par exemple, supposez que nous voulons tcl_max
avec un
argument NULL et un non NULL pour renvoyer l'argument non NULL plut�t que
NULL :
CREATE FUNCTION tcl_max(integer, integer) RETURNS integer AS $$ if {[argisnull 1]} { if {[argisnull 2]} { return_null } return $2 } if {[argisnull 2]} { return $1 } if {$1 > $2} {return $1} return $2 $$ LANGUAGE pltcl;
Comme indiqu� ci-dessus, pour renvoyer une valeur NULL � partir d'une fonction PL/Tcl, ex�cutez return_null. Ceci peut �tre fait que la fonction soit stricte ou non.
Les arguments de type compos� sont pass�s � la fonction comme des tableaux Tcl. Les noms des �l�ments du tableau sont les noms d'attribut du type composite. Si un attribut dans la ligne pass�e a la valeur NULL, il n'appara�tra pas dans le tableau. Voici un exemple :
CREATE TABLE employe ( nom text, salaire integer, age integer ); CREATE FUNCTION surpaye(employe) RETURNS boolean AS $$ if {200000.0 < $1(salaire)} { return "t" } if {$1(age) < 30 && 100000.0 < $1(salaire)} { return "t" } return "f" $$ LANGUAGE pltcl;
Il n'y a actuellement aucun support pour le retour d'une valeur r�sultat de type compos� et pour le retour d'ensembles.
PL/Tcl n'a pas actuellement du support complet pour les types de domaine : il traite un domaine de la m�me fa�on que le type scalaire sous-jacent. Cela signifie que les contraintes associ�es avec le domaine ne seront pas forc�es. Ce n'est pas un probl�me pour les arguments de la fonction mais c'est hasardeux de d�clarer une fonction PL/Tcl renvoyant un type domaine.
Pr�c�dent | Sommaire | Suivant |
PL/Tcl - Langage de proc�dures Tcl | Niveau sup�rieur | Valeurs des donn�es avec PL/Tcl |