root/traduc/branches/bv747/manuel/ref/create_aggregate.sgml

Revision 104, 9.9 kB (checked in by gleu, 3 years ago)

Des sauts de ligne en trop dans les exemples.

Line 
1 <!--
2 $Header: /var/lib/cvs/pgsql-fr/sgml/ref/create_aggregate.sgml,v 1.7.2.2 2005/04/02 06:45:58 guillaume Exp $
3 PostgreSQL documentation
4 -->
5
6 <refentry id="SQL-CREATEAGGREGATE">
7  <refmeta>
8   <refentrytitle id="sql-createaggregate-title">CREATE AGGREGATE</refentrytitle>
9   <refmiscinfo>SQL - Instructions du langage</refmiscinfo>
10  </refmeta>
11
12  <refnamediv>
13   <refname>CREATE AGGREGATE</refname>
14   <refpurpose>définit une nouvelle fonction d'agrégat</refpurpose>
15  </refnamediv>
16
17  <indexterm zone="sql-createaggregate">
18   <primary>CREATE AGGREGATE</primary>
19  </indexterm>
20
21  <refsynopsisdiv>
22 <synopsis>
23 CREATE AGGREGATE <replaceable class="PARAMETER">nom</replaceable> (
24     BASETYPE = <replaceable class="PARAMETER">type_donnée_entrée</replaceable>,
25     SFUNC = <replaceable class="PARAMETER">sfonc</replaceable>,
26     STYPE = <replaceable class="PARAMETER">type_donnée_état</replaceable>
27     [ , FINALFUNC = <replaceable class="PARAMETER">ffonc</replaceable> ]
28     [ , INITCOND = <replaceable
29 class="PARAMETER">condition_initiale</replaceable> ]
30 )
31 </synopsis>
32  </refsynopsisdiv>
33
34  <refsect1>
35   <title>Description</title>
36
37   <para>
38    <command>CREATE AGGREGATE</command> définit une nouvelle fonction d'agrégat.
39    Certaines fonctions d'agrégat pour les types de base comme
40    <function>min(integer)</function> et <function>avg(double
41    precision)</function> sont déjà fournies dans la distribution standard. Si
42    une d'entre elles définit de nouveaux types ou a besoin d'une fonction
43    d'agrégat non fournie, alors <command>CREATE AGGREGATE</command> peut être
44    utilisé pour fournir les fonctionnalités désirées.
45   </para>
46
47   <para>
48    Si un nom de schéma est donné (par exemple, <literal>CREATE AGGREGATE
49    monschema.monagg ...</>), alors la fonction d'agrégat est créée dans le
50    schéma spécifié. Sinon, elle est créée dans le schéma courant.
51   </para>
52
53   <para>
54    Une fonction d'agrégat est identifiée par son nom et son type de données en
55    entrée. Deux agrégats dans le même schéma peuvent avoir le même nom s'ils
56    opèrent sur des types différents en entrée. Le nom et le type de données en
57    entrée d'un agrégat doivent aussi être distincts du nom et du type de données
58    de toutes les fonctions ordinaires du même schéma.
59   </para>
60
61   <para>
62    Une fonction d'agrégat est réalisée à partir d'une ou deux fonctions
63    ordinaires&nbsp;:
64    une fonction de transition d'état
65    <replaceable class="PARAMETER">sfonc</replaceable>,
66    et une fonction de traitement final optionnelle
67    <replaceable class="PARAMETER">ffonc</replaceable>.
68    Elles sont utilisées ainsi&nbsp;:
69 <programlisting>
70 <replaceable class="PARAMETER">sfonc</replaceable>( état-interne, nouvel-élément-données ) ---> prochain-état-interne
71 <replaceable class="PARAMETER">ffonc</replaceable>( état-interne ) ---> valeur-agrégat
72 </programlisting>
73   </para>
74
75   <para>
76    <productname>PostgreSQL</productname> crée une variable temporaire de type
77    <replaceable class="PARAMETER">stype</replaceable> pour contenir l'état
78    interne courant de l'agrégat. À chaque élément de données en entrée, la
79    fonction de transition d'état est appelée pour calculer une nouvelle valeur
80    de l'état interne. Une fois que toutes les données sont traitées, la fonction
81    finale est appelée une fois pour calculer la valeur de retour de l'agrégat.
82    S'il n'existe pas de fonction finale, alors la valeur d'état final est
83    retournée ainsi.
84   </para>
85  
86   <para>
87    Une fonction d'agrégat peut fournir une condition initiale, c'est-à-dire une
88    valeur initiale pour la valeur de l'état interne. Ceci est spécifié et stocké
89    dans la base de données comme une colonne de type <type>text</type> mais doit
90    être une représentation externe valide d'une constante du type de donnée de
91    la valeur de l'état. Si elle n'est pas fournie, la valeur de l'état commence
92    avec NULL.
93   </para>
94  
95   <para>
96    Si la fonction de transition de l'état est déclarée <quote>strict</quote>,
97    alors elle ne peut pas être appelée avec des entrées NULL. Avec une telle
98    fonction de transition, l'exécution d'agrégat se comporte ainsi. Les valeurs
99    des entrées NULL sont ignorées (la fonction n'est pas appelée et la valeur de
100    l'état précédent est conservée). Si la valeur de l'état initial est NULL,
101    alors la première valeur en entrée non NULL remplace la valeur de l'état et
102    la fonction de transition est appelée en commençant avec la seconde valeur en
103    entrée non NULL. Ceci est pratique pour implémenter les agrégats comme
104    <function>max</function>. Notez que ce comportement est seulement disponible
105    quand <replaceable class="PARAMETER">type_donnée_état</replaceable> est
106    identique à <replaceable class="PARAMETER">type_donnée_entrée</replaceable>.
107    Lorsque ces types sont différents, vous devez fournir une condition initiale
108    non NULL ou utiliser une fonction de transition non stricte.
109   </para>
110  
111   <para>
112    Si la fonction de transition d'état n'est pas stricte, alors elle sera
113    appelée sans condition à chaque valeur en entrée et devra gérer les
114    entrées NULL et les valeurs de transition NULL. Ceci permet à l'auteur de
115    l'agrégat d'avoir le contrôle complet sur la gestion des valeurs NULL par
116    l'agrégat.
117   </para>
118  
119   <para>
120    Si la fonction finale est déclarée <quote>strict</quote>, alors elle ne sera
121    pas appelée quand la valeur d'état finale est NULL&nbsp;; à la place, un
122    résultat NULL sera retourné automatiquement. (Bien sûr, c'est simplement le
123    comportement normal de fonctions strictes.) Dans tous les cas, la fonction
124    finale a l'option de renvoyer une valeur NULL. Par exemple, la fonction
125    finale pour <function>avg</function> renvoie NULL lorsqu'elle n'a aucune
126    lignes en entrée.
127   </para>
128  </refsect1>
129
130  <refsect1>
131   <title>Paramètres</title>
132
133   <variablelist>
134    <varlistentry>
135     <term><replaceable class="PARAMETER">nom</replaceable></term>
136     <listitem>
137      <para>
138       Le nom de la fonction d'agrégat à créer (pouvant être qualifié avec le nom
139       du schéma).
140      </para>
141     </listitem>
142    </varlistentry>
143
144    <varlistentry>
145     <term><replaceable class="PARAMETER">type_donnée_entrée</replaceable></term>
146     <listitem>
147      <para>
148       Le type de données en entrée sur lequel opère la fonction d'agrégat. Elle
149       peut être spécifiée comme <literal>"ANY"</> pour un agrégat qui n'examine
150       pas les valeurs en entrée (un exemple est <function>count(*)</function>).
151      </para>
152     </listitem>
153    </varlistentry>
154
155    <varlistentry>
156     <term><replaceable class="PARAMETER">sfonc</replaceable></term>
157     <listitem>
158      <para>
159       Le nom de la fonction de transition de l'état à appeler pour chaque
160       valeur en entrée. C'est normalement une fonction à deux arguments, le
161       premier étant de type <replaceable
162       class="PARAMETER">type_donnée_état</replaceable> et le second de type
163       <replaceable class="PARAMETER">type_donnée_entrée</replaceable>.
164       Autrement, pour un agrégat qui n'examine pas les valeurs en entrée, la
165       fonction prend un seul argument de type <replaceable
166       class="PARAMETER">type_donnée_état</replaceable>. Dans chaque cas, la
167       fonction doit renvoyer une valeur de type <replaceable
168       class="PARAMETER">type_donnée_état</replaceable>. Cette fonction prend la
169       valeur de l'état en cours et l'élément de donnée en cours et renvoie la
170       prochaine valeur d'état.
171      </para>
172     </listitem>
173    </varlistentry>
174
175    <varlistentry>
176     <term><replaceable class="PARAMETER">type_donnée_état</replaceable></term>
177     <listitem>
178      <para>
179       Le type de donnée pour la valeur d'état de l'agrégat.
180      </para>
181     </listitem>
182    </varlistentry>
183
184    <varlistentry>
185     <term><replaceable class="PARAMETER">ffonc</replaceable></term>
186     <listitem>
187      <para>
188       Le nom de la fonction finale à appeler pour traiter le résultat de
189       l'agrégat une fois que toutes les données en entrée aient été parcourues.
190       La fonction prend un seul argument de type <replaceable
191       class="PARAMETER">type_donnée_état</replaceable>. Le type de retour de
192       l'agrégat de la fonction est défini comme le type de retour de cette
193       fonction. Si <replaceable class="PARAMETER">ffonc</replaceable> n'est pas
194       spécifiée, alors la valeur d'état finale est utilisée comme résultat de
195       l'agrégat et le type de retour est <replaceable
196       class="PARAMETER">type_donnée_état</replaceable>.
197      </para>
198     </listitem>
199    </varlistentry>
200
201    <varlistentry>
202     <term><replaceable class="PARAMETER">condition_initiale</replaceable></term>
203     <listitem>
204      <para>
205       La configuration initiale pour la valeur de l'état. Elle doit être une
206       constante de type chaîne de caractères dans la forme acceptée par le type
207       de données <replaceable class="PARAMETER">type_donnée_état</replaceable>.
208       Si non spécifié, la valeur d'état commence à NULL.
209      </para>
210     </listitem>
211    </varlistentry>
212   </variablelist>
213
214   <para>
215    Les paramètres de <command>CREATE AGGREGATE</command> peuvent être écrit
216    dans n'importe quel ordre, pas uniquement dans l'ordre illustré ci-dessus.
217   </para>
218  </refsect1>
219  
220  <refsect1>
221   <title>Exemples</title>
222
223   <para>
224    Voir <xref linkend="xaggr">.
225   </para>
226  </refsect1>
227
228  <refsect1>
229   <title>Compatibilité</title>
230
231   <para>
232    <command>CREATE AGGREGATE</command> est une extension du langage
233    <productname>PostgreSQL</productname>. Le standard SQL ne fournit pas de
234    fonctions d'agrégat définies par l'utilisateur.
235   </para>
236  </refsect1>
237
238  <refsect1>
239   <title>Voir aussi</title>
240
241   <simplelist type="inline">
242    <member><xref linkend="sql-alteraggregate" endterm="sql-alteraggregate-title"></member>
243    <member><xref linkend="sql-dropaggregate" endterm="sql-dropaggregate-title"></member>
244   </simplelist>
245  </refsect1>
246 </refentry>
247
248 <!-- Keep this comment at the end of the file
249 Local variables:
250 mode: sgml
251 sgml-omittag:nil
252 sgml-shorttag:t
253 sgml-minimize-attributes:nil
254 sgml-always-quote-attributes:t
255 sgml-indent-step:1
256 sgml-indent-data:t
257 sgml-parent-document:nil
258 sgml-default-dtd-file:"../reference.ced"
259 sgml-exposed-tags:nil
260 sgml-local-catalogs:"/usr/lib/sgml/catalog"
261 sgml-local-ecat-files:nil
262 End:
263 -->
Note: See TracBrowser for help on using the browser.