Documentation PostgreSQL 7.4.29 | ||||
---|---|---|---|---|
Pr�c�dent | Arri�re rapide | Avance rapide | Suivant |
CREATE AGGREGATE nom ( BASETYPE = type_donn�e_entr�e, SFUNC = sfonc, STYPE = type_donn�e_�tat [ , FINALFUNC = ffonc ] [ , INITCOND = condition_initiale ] )
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.
Le nom de la fonction d'agr�gat � cr�er (pouvant �tre qualifi� avec le nom du sch�ma).
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(*)
).
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.
Le type de donn�e pour la valeur d'�tat de l'agr�gat.
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.
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.
CREATE AGGREGATE est une extension du langage PostgreSQL. Le standard SQL ne fournit pas de fonctions d'agr�gat d�finies par l'utilisateur.
Pr�c�dent | Sommaire | Suivant |
COPY | Niveau sup�rieur | CREATE CAST |