10.4. Stockage de valeurs

Les valeurs qui doivent être insérées dans une table sont converties vers le type de données de la colonne de destination selon les règles suivantes.

Conversion de types pour le stockage de valeurs

  1. Vérifier qu'il y ait une correspondance exacte avec la cible.

  2. Dans le cas contraire, essayer de convertir l'expression vers le type cible. Cela réussira s'il y a une conversion (cast) enregistrée entre ces deux types. Si une expression est de type inconnu, le contenu de la chaîne littérale sera fourni à l'entrée de la routine de conversion pour le type cible.

  3. Si la cible est un type de longueur fixe (par exemple char ou varchar déclaré avec une longueur) alors essayer de trouver une fonction de taille pour le type cible. Une fonction de taille est une fonction qui a le même nom que le type, qui prend deux arguments dont le premier est le type lui-même et le second est du type entier. La fonction retourne le même type. Si une fonction est trouvée, elle est appliquée en lui passant la longueur déclarée de la colonne comme second paramètre.

Exemple 10-6. Conversion de types pour le stockage de caractères

Pour une colonne cible déclarée comme character(20), la déclaration suivante assure que la valeur stockée a la taille correcte :

CREATE TABLE vv (v character(20));
INSERT INTO vv SELECT 'abc' || 'def';
SELECT v, length(v) FROM vv;

          v           | length
----------------------+--------
 abcdef               |     20
(1 row)

Ce qui s'est réellement passé ici, c'est que les deux types inconnus sont résolus en texte par défaut, permettant à l'opérateur || de les résoudre comme une concaténation de texte. Ensuite, le résultat texte de l'opérateur est converti en bpchar ( << blank-padded char >>, le nom interne du type de données character (caractère)) pour correspondre au type de la colonne cible. (Depuis que les types texte et bpchar ont une compatibilité binaire, cette conversion n'insère aucun appel réel à une fonction.) Enfin, la fonction de taille bpchar(bpchar, integer) est trouvée dans le catalogue système et appliquée au résultat de l'opérateur et à la longueur de la colonne stockée. Cette fonction de type spécifique effectue le contrôle de la longueur requise et ajoute des espaces pour combler la chaîne.