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

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

Des sauts de ligne en trop dans les exemples.

Line 
1 <!-- $Header: /var/lib/cvs/pgsql-fr/sgml/ref/create_cast.sgml,v 1.7.2.2 2005/06/13 06:24:08 guillaume Exp $ -->
2
3 <refentry id="SQL-CREATECAST">
4  <refmeta>
5   <refentrytitle id="SQL-CREATECAST-TITLE">CREATE CAST</refentrytitle>
6   <refmiscinfo>SQL - Instructions du langage</refmiscinfo>
7  </refmeta>
8
9  <refnamediv>
10   <refname>CREATE CAST</refname>
11   <refpurpose>définit une nouvelle conversion</refpurpose>
12  </refnamediv>
13
14  <indexterm zone="sql-createcast">
15   <primary>CREATE CAST</primary>
16  </indexterm>
17
18  <refsynopsisdiv>
19 <synopsis>
20 CREATE CAST (<replaceable>typesource</replaceable> AS <replaceable>typecible</replaceable>)
21     WITH FUNCTION <replaceable>nomfonction</replaceable> (<replaceable>argtype</replaceable>)
22     [ AS ASSIGNMENT | AS IMPLICIT ]
23
24 CREATE CAST (<replaceable>typesource</replaceable> AS <replaceable>typecible</replaceable>)
25     WITHOUT FUNCTION
26     [ AS ASSIGNMENT | AS IMPLICIT ]
27 </synopsis>
28  </refsynopsisdiv>
29
30  <refsect1 id="sql-createcast-description">
31   <title>Description</title>
32
33   <para>
34    <command>CREATE CAST</command> définit une nouvelle conversion. Une
35    conversion spécifie la façon de réaliser une conversion entre deux types de
36    données. Par exemple,
37 <programlisting>
38 SELECT CAST(42 AS text);
39 </programlisting>
40    convertit la constante entière 42 dans le type <type>text</type> en appelant
41    une fonction précédemment spécifiée, dans ce cas <literal>text(int4)</>. (Si
42    aucune conversion convenable n'a été définie, la conversion échoue.)
43   </para>
44
45   <para>
46    Deux types pourraient être <firstterm>compatibles binairement</firstterm>,
47    ce qui signifie qu'ils peuvent être convertis dans l'autre type
48    <quote>librement</quote> sans appeler de fonction. Ceci requiert que les
49    valeurs correspondantes utilisent la même représentation interne. En fait,
50    les types <type>text</type> et <type>varchar</type> sont compatibles
51    binairement.
52   </para>
53
54   <para>
55    Par défaut, une conversion peut être appelée par une demande explicite.
56    Voici des constructions explicites&nbsp;: <literal>CAST(<replaceable>x</> AS
57    <replaceable>nomtype</>)</literal>,
58    <replaceable>x</><literal>::</><replaceable>nomtype</> ou
59    <replaceable>nomtype</>(<replaceable>x</>).
60   </para>
61
62   <para>
63    Si la conversion est marquée <literal>AS ASSIGNMENT</>, alors elle peut être
64    appelée implicitement lors de l'affectation d'une valeur à une colonne du
65    type de données cible. Par exemple, en supposant que
66    <literal>foo.f1</literal> est une colonne de type <type>text</type>, alors
67 <programlisting>
68 INSERT INTO foo (f1) VALUES (42);
69 </programlisting>
70    sera autorisé si la conversion du type <type>integer</type> vers le type
71    <type>text</type> est indiquée <literal>AS ASSIGNMENT</>, sinon cela sera
72    interdit. (Nous utilisons généralement le terme de <firstterm>conversion
73    d'affectation</firstterm> pour décrire ce type de conversion.)
74   </para>
75
76   <para>
77    Si la conversion est marquée <literal>AS IMPLICIT</>, alors elle peut être
78    appelée implicitement dans tout contexte, que ce soit une affectation ou en
79    interne dans une expression. Par exemple, comme <literal>||</> prend deux
80    opérandes <type>text</>,
81 <programlisting>
82 SELECT 'L\'heure est ' || now();
83 </programlisting>
84    sera autorisé seulement si la conversion du type <type>timestamp</> vers le
85    type <type>text</type> est marquée <literal>AS IMPLICIT</>. Sinon, il sera
86    nécessaire d'écrire explicitement la conversion, par exemple
87 <programlisting>
88 SELECT 'L\'heure est ' || CAST(now() AS text);
89 </programlisting>
90    (Nous utilisons généralement le terme de <firstterm>conversion
91    implicite</firstterm> pour décrire ce type de conversion.)
92   </para>
93
94   <para>
95    Il est conseillé d'être conservateur sur le marquage des conversions comme
96    implicites. Une surabondance de chemins de conversions implicites peut faire
97    en sorte que <productname>PostgreSQL</productname> effectue des choix
98    surprenant suite à l'interprétations des commandes ou soit complètement
99    incapable de résoudre les commandes parce qu'il existe plusieurs
100    interprétations possibles. Une bonne règle à suivre est de réaliser une
101    conversion implicite appelable seulement pour les transformations préservant
102    l'information entre les types dans la même catégorie générale. Par exemple,
103    la conversion entre <type>int2</type> et <type>int4</type> peut être
104    raisonnablement implicite mais celle entre <type>float8</type> et
105    <type>int4</type> devraient être probablement uniquement sur affectation. Les
106    conversions entre catégorie, tels que de <type>text</> vers <type>int4</>,
107    sont bien préférables en mode explicite seul.
108   </para>
109
110   <para>
111    Pour être capable de créer une conversion, vous devez être le propriétaire
112    du type source ou destination. Pour créer une conversion compatible
113    binairement, vous devez être superutilisateur. (Cette restriction est faite
114    parce qu'une conversion compatible binairement erronée peut facilement causer
115    un arrêt brutal du serveur.)
116   </para>
117  </refsect1>
118
119  <refsect1>
120   <title>Paramètres</title>
121
122    <variablelist>
123     <varlistentry>
124      <term><replaceable>typesource</replaceable></term>
125
126      <listitem>
127       <para>
128        Le nom du type de données source dans la conversion.
129       </para>
130      </listitem>
131     </varlistentry>
132
133     <varlistentry>
134      <term><replaceable>typecible</replaceable></term>
135
136      <listitem>
137       <para>
138        Le nom du type de données cible dans la conversion.
139       </para>
140      </listitem>
141     </varlistentry>
142
143     <varlistentry>   
144      <term><replaceable>nomfonction</replaceable>
145       (<replaceable>type_argument</replaceable>)</term>
146
147      <listitem>
148       <para>
149        La fonction utilisée pour effectuer la conversion. Le nom de la fonction
150        pourrait être qualifié du nom du schéma. Si ce n'est pas le cas, la
151        fonction sera recherchée dans le chemin. Le type d'argument doit être
152        identique au type source, le type de données résultat doit correspondre
153        au type cible de la conversion.
154       </para>
155      </listitem>
156     </varlistentry>
157
158     <varlistentry>
159      <term><literal>WITHOUT FUNCTION</literal></term>
160
161      <listitem>
162       <para>
163        Indique que le type source et le type cible sont compatibles binairement,
164        donc aucune fonction n'est requise pour effectuer la conversion.
165       </para>
166      </listitem>
167     </varlistentry>
168
169     <varlistentry>
170      <term><literal>AS ASSIGNMENT</literal></term>
171
172      <listitem>
173       <para>
174        Indique que la conversion pourrait être appelée implicitement dans les
175        contextes d'affectation.
176       </para>
177      </listitem>
178     </varlistentry>
179
180     <varlistentry>
181      <term><literal>AS IMPLICIT</literal></term>
182
183      <listitem>
184       <para>
185        Indique que la conversion pourrait être appelée implicitement dans tout
186        contexte.
187       </para>
188      </listitem>
189     </varlistentry>
190    </variablelist>
191
192  </refsect1>
193
194  <refsect1 id="sql-createcast-notes">
195   <title>Notes</title>
196
197   <para>
198    Utilisez <command>DROP CAST</command> pour supprimer les conversions
199    définies par l'utilisateur.
200   </para>
201
202   <para>
203    Rappelez-vous que si vous souhaitez être capable de convertir les types dans
204    les deux sens, vous devez déclarer explicitement les deux sens.
205   </para>
206
207   <para>
208    Avant <productname>PostgreSQL</> 7.3, chaque fonction qui avait le même nom
209    qu'un type de données, envoyait ce type de données et prenait un argument
210    d'un autre type était automatiquement détectée comme une fonction de
211    conversion. Ceci a été abandonné lors de l'introduction des schémas et pour
212    être capable de représenter des conversions compatibles binairement dans les
213    catalogues système. (Les fonctions de conversion intégrées suivent toujours
214    le même schéma de nommage mais elle doivent maintenant être données comme
215    conversion dans le catalogue système <literal>pg_cast</>.)
216   </para>
217  </refsect1>
218
219
220  <refsect1 id="sql-createcast-examples">
221   <title>Exemples</title>
222
223   <para>
224    Pour créer une conversion du type <type>text</type> vers le type
225    <type>int4</type> en utilisant la fonction
226    <literal>int4(text)</literal>&nbsp;:
227 <programlisting>
228 CREATE CAST (text AS int4) WITH FUNCTION int4(text);
229 </programlisting>
230    (Cette conversion est déjà prédéfinie dans le système.)
231   </para>
232  </refsect1>
233
234  
235  <refsect1 id="sql-createcast-compat">
236   <title>Compatibilité</title>
237
238   <para>
239    La commande <command>CREATE CAST</command> est conforme à SQL99 sauf que
240    SQL99 ne parle pas des types compatibles binairement. <literal>AS IMPLICIT</>
241    est aussi une extension <productname>PostgreSQL</productname>.
242   </para>
243  </refsect1>
244
245
246  <refsect1 id="sql-createcast-seealso">
247   <title>Voir aussi</title>
248
249   <para>
250    <xref linkend="sql-createfunction" endterm="sql-createfunction-title">,
251    <xref linkend="sql-createtype" endterm="sql-createtype-title">,
252    <xref linkend="sql-dropcast" endterm="sql-dropcast-title">
253   </para>
254  </refsect1>
255
256 </refentry>
257
258 <!-- Keep this comment at the end of the file
259 Local variables:
260 mode:sgml
261 sgml-omittag:nil
262 sgml-shorttag:t
263 sgml-minimize-attributes:nil
264 sgml-always-quote-attributes:t
265 sgml-indent-step:1
266 sgml-indent-data:t
267 sgml-parent-document:nil
268 sgml-default-dtd-file:"../reference.ced"
269 sgml-exposed-tags:nil
270 sgml-local-catalogs:("/usr/lib/sgml/catalog")
271 sgml-local-ecat-files:nil
272 End:
273 -->
Note: See TracBrowser for help on using the browser.