CREATE AGGREGATE

Nom

CREATE AGGREGATE -- d�finit une nouvelle fonction d'agr�gat

Synopsis

CREATE AGGREGATE nom (
    BASETYPE = type_donn�e_entr�e,
    SFUNC = sfonc,
    STYPE = type_donn�e_�tat
    [ , FINALFUNC = ffonc ]
    [ , INITCOND = condition_initiale ]
)

Description

CREATE AGGREGATE d�finit une nouvelle fonction d'agr�gat. Certaines fonctions d'agr�gat pour les types de base comme min(integer) et avg(double precision) sont d�j� fournies dans la distribution standard. Si une d'entre elles d�finit de nouveaux types ou a besoin d'une fonction d'agr�gat non fournie, alors CREATE AGGREGATE peut �tre utilis� pour fournir les fonctionnalit�s d�sir�es.

Si un nom de sch�ma est donn� (par exemple, CREATE AGGREGATE monschema.monagg ...), alors la fonction d'agr�gat est cr��e dans le sch�ma sp�cifi�. Sinon, elle est cr��e dans le sch�ma courant.

Une fonction d'agr�gat est identifi�e par son nom et son type de donn�es en entr�e. Deux agr�gats dans le m�me sch�ma peuvent avoir le m�me nom s'ils op�rent sur des types diff�rents en entr�e. Le nom et le type de donn�es en entr�e d'un agr�gat doivent aussi �tre distincts du nom et du type de donn�es de toutes les fonctions ordinaires du m�me sch�ma.

Une fonction d'agr�gat est r�alis�e � partir d'une ou deux fonctions ordinaires : une fonction de transition d'�tat sfonc, et une fonction de traitement final optionnelle ffonc. Elles sont utilis�es ainsi :

sfonc( �tat-interne, nouvel-�l�ment-donn�es ) ---> prochain-�tat-interne
ffonc( �tat-interne ) ---> valeur-agr�gat

PostgreSQL cr�e une variable temporaire de type stype pour contenir l'�tat interne courant de l'agr�gat. � chaque �l�ment de donn�es en entr�e, la fonction de transition d'�tat est appel�e pour calculer une nouvelle valeur de l'�tat interne. Une fois que toutes les donn�es sont trait�es, la fonction finale est appel�e une fois pour calculer la valeur de retour de l'agr�gat. S'il n'existe pas de fonction finale, alors la valeur d'�tat final est retourn�e ainsi.

Une fonction d'agr�gat peut fournir une condition initiale, c'est-�-dire une valeur initiale pour la valeur de l'�tat interne. Ceci est sp�cifi� et stock� dans la base de donn�es comme une colonne de type text mais doit �tre une repr�sentation externe valide d'une constante du type de donn�e de la valeur de l'�tat. Si elle n'est pas fournie, la valeur de l'�tat commence avec NULL.

Si la fonction de transition de l'�tat est d�clar�e <<�strict�>>, alors elle ne peut pas �tre appel�e avec des entr�es NULL. Avec une telle fonction de transition, l'ex�cution d'agr�gat se comporte ainsi. Les valeurs des entr�es NULL sont ignor�es (la fonction n'est pas appel�e et la valeur de l'�tat pr�c�dent est conserv�e). Si la valeur de l'�tat initial est NULL, alors la premi�re valeur en entr�e non NULL remplace la valeur de l'�tat et la fonction de transition est appel�e en commen�ant avec la seconde valeur en entr�e non NULL. Ceci est pratique pour impl�menter les agr�gats comme max. Notez que ce comportement est seulement disponible quand type_donn�e_�tat est identique � type_donn�e_entr�e. Lorsque ces types sont diff�rents, vous devez fournir une condition initiale non NULL ou utiliser une fonction de transition non stricte.

Si la fonction de transition d'�tat n'est pas stricte, alors elle sera appel�e sans condition � chaque valeur en entr�e et devra g�rer les entr�es NULL et les valeurs de transition NULL. Ceci permet � l'auteur de l'agr�gat d'avoir le contr�le complet sur la gestion des valeurs NULL par l'agr�gat.

Si la fonction finale est d�clar�e <<�strict�>>, alors elle ne sera pas appel�e quand la valeur d'�tat finale est NULL ; � la place, un r�sultat NULL sera retourn� automatiquement. (Bien s�r, c'est simplement le comportement normal de fonctions strictes.) Dans tous les cas, la fonction finale a l'option de renvoyer une valeur NULL. Par exemple, la fonction finale pour avg renvoie NULL lorsqu'elle n'a aucune lignes en entr�e.

Param�tres

nom

Le nom de la fonction d'agr�gat � cr�er (pouvant �tre qualifi� avec le nom du sch�ma).

type_donn�e_entr�e

Le type de donn�es en entr�e sur lequel op�re la fonction d'agr�gat. Elle peut �tre sp�cifi�e comme "ANY" pour un agr�gat qui n'examine pas les valeurs en entr�e (un exemple est count(*)).

sfonc

Le nom de la fonction de transition de l'�tat � appeler pour chaque valeur en entr�e. C'est normalement une fonction � deux arguments, le premier �tant de type type_donn�e_�tat et le second de type type_donn�e_entr�e. Autrement, pour un agr�gat qui n'examine pas les valeurs en entr�e, la fonction prend un seul argument de type type_donn�e_�tat. Dans chaque cas, la fonction doit renvoyer une valeur de type type_donn�e_�tat. Cette fonction prend la valeur de l'�tat en cours et l'�l�ment de donn�e en cours et renvoie la prochaine valeur d'�tat.

type_donn�e_�tat

Le type de donn�e pour la valeur d'�tat de l'agr�gat.

ffonc

Le nom de la fonction finale � appeler pour traiter le r�sultat de l'agr�gat une fois que toutes les donn�es en entr�e aient �t� parcourues. La fonction prend un seul argument de type type_donn�e_�tat. Le type de retour de l'agr�gat de la fonction est d�fini comme le type de retour de cette fonction. Si ffonc n'est pas sp�cifi�e, alors la valeur d'�tat finale est utilis�e comme r�sultat de l'agr�gat et le type de retour est type_donn�e_�tat.

condition_initiale

La configuration initiale pour la valeur de l'�tat. Elle doit �tre une constante de type cha�ne de caract�res dans la forme accept�e par le type de donn�es type_donn�e_�tat. Si non sp�cifi�, la valeur d'�tat commence � NULL.

Les param�tres de CREATE AGGREGATE peuvent �tre �crit dans n'importe quel ordre, pas uniquement dans l'ordre illustr� ci-dessus.

Exemples

Voir Section 33.9.

Compatibilit�

CREATE AGGREGATE est une extension du langage PostgreSQL. Le standard SQL ne fournit pas de fonctions d'agr�gat d�finies par l'utilisateur.

Voir aussi

ALTER AGGREGATE, DROP AGGREGATE