Les types de données sous ORACLE

publicité
Les types de données sous ORACLE
Par défaut, les types de données du tableau 1 (classés par ordre alphabétique) sont pris en charge
par Oracle8 et peuvent être utilisés dans la définition d'une table.
Types de données pris en charge par Oracle8
Texte de données
Description
Taille maximale des colonnes et valeurs par défaut
BFILE
Données binaires,
enregistrées dans un
fichier externe.
Jusqu'à 4 Go.
BLOB
Données binaires,
conservées dans la base
de données.
Jusqu'à 4 Go.
CHAR (n)
Chaîne de caractères de
longueur fixe n.
Chaque ligne contient n caractères ; la valeur par
défaut est 1 ; la taille maximale est 2 000. Les
colonnes plus courtes sont remplies avec des espaces.
CLOB
Données de jeux de
caractères (singlebyte).
Jusqu'à 4 Go.
DATE
Date et heure, avec la
plage de valeurs de
1.1.4712 av. J.C. à
31.12.4712 ap. J.C.
Toujours 7 octets.
NLS_DATE_FORMAT est le format standard.
Par défaut, l'heure n'est pas affichée.
LONG
Données de jeux de
caractères de longueur
variable (forme
ancienne de CLOB,
mais toujours utile car
elle peut être mise en
oeuvre directement)
Jusqu'à 2 Go.
LONG RAW
Données binaires de
longueur variable
(forme ancienne de
BLOB, mais toujours
utile car elle peut être
mise en oeuvre
directement).
Jusqu'à 2 Go.
NCHAR (n)
Chaîne de caractères
enregistrée dans le jeu
de caractères national,
de longueur fixe.
Voir CHAR.
NCLOB
Chaîne de caractères
Voir CLOB.
enregistrée dans le jeu
de caractères national.
NUMBER (v, n)
Données numériques
de longueur variable,
dont les positions avant
la virgule sont définies
avec v et celles après la
virgule, avec n.
L'espace disque requis varie d'une ligne à l'autre,
selon la valeur devant être enregistrée.
L'espace disque maximal est de 21 octets.
NVARCHAR2 (n)
Chaîne de caractères
enregistrée dans le jeu
de caractères national,
de longueur variable.
Voir VARCHAR2.
RAW (n)
Données binaires, dont
la taille maximale doit
être spécifiée.
L'espace disque par ligne est variable. La longueur
maximale doit être spécifiée et ne peut excéder
2 000.
ROWID
Données binaires
représentant l'adresse
d'une ligne.
Valeur fixe de 10 octets pour ROWID normal.
VARCHAR2 (n)
Chaîne de caractères de
longueur variable qui
enregistre les données
de jeux de caractères.
Longueur variable par ligne, au maximum de 4 000
octets. Elle doit être spécifiée.
I - LES CHAINES DE CARACTERES
CHAR
Lors de la création d'une table est défini le nombre maximal de caractères pouvant être enregistrés.
La valeur par défaut est 1, la valeur maximale est 2 000 (255 sous Oracle7).
Dans les colonnes de ce type de données, Oracle s'assure que toutes les valeurs enregistrées
présentent cette longueur (le cas échéant, des espaces sont ajoutés pour atteindre la longueur
définie) et n'autorise pas l'enregistrement des valeurs plus longues (en cas de tentative, un message
d'erreur est affiché si ce ne sont pas uniquement des espaces qui excèdent la longueur définie, car
seuls ces caractères peuvent être tronqués).
Les données d'une ligne CHAR sont enregistrées dans le jeu de caractères de la base de données.
Padded comparison
L'une des principales caractéristiques des lignes CHAR est que la longueur totale joue un rôle dans
les comparaisons, les espaces étant pris en compte. Si, par exemple, « ANNE » est enregistré dans
un champ CHAR(6), deux espaces sont ajoutés. Si l'on essaie de comparer cette colonne avec le
littéral ANNE, on obtient une inégalité, car le littéral ne contient aucun espace ! C'est la raison pour
laquelle il faut mettre en oeuvre une fonction appropriée (RPAD) pour pouvoir comparer les valeurs.
VARCHAR2
Les colonnes VARCHAR2 permettent l'enregistrement des chaînes de caractères de longueur
variable, les données étant enregistrées dans le jeu de caractères de la base de données et la
longueur maximale étant de 4 000 signes. Une longueur doit être spécifiée dans la définition.
VARCHAR
Il existe actuellement le type de données VARCHAR, équivalent à VARCHAR2. Mais sa définition
pouvant changer ultérieurement, ce type de données ne devrait pas encore être utilisé.
NCHAR et NVARCHAR2
Les types de données NCHAR et NVACHAR2, apparus sous Oracle8, correspondent dans leur
définition aux types de données CHAR et VARCHAR2. La seule différence est que les types de
données N enregistrent les données de caractères dans le jeu de caractères national, et non dans
celui de la base de données. De cette manière, les données de la base de données peuvent être
enregistrées dans deux jeux de caractères différents si cela est nécessaire.
CLOB et NCLOB
Pour enregistrer les grands volumes de données de jeux de caractères, on dispose des types de
données CLOB et NCLOB, qui peuvent accueillir chacun jusqu'à 4 Go de données par ligne.
L'inconvénient présenté par ces types de données réside dans le fait que leur utilisation requiert la
mise en oeuvre d'un package dédié au traitement des données.
Restrictions liées à l'utilisation de LONG
Les colonnes LONG acceptent les données de jeux de caractères d'une taille allant jusqu'à 2 Go.
Contrairement aux données LOB, elles ont l'avantage de pouvoir être utilisées directement dans les
instructions SELECT, UPDATE et INSERT. Elles ne sont toutefois pas exemptes d'inconvénients :
leur traitement est limité au langage PL/SQL (c'est-à-dire à environ 32 Ko), les champs LONG ne
peuvent pas être répliqués et ne sont pas accessibles via des liens de base de données. Il est donc
préférable d'avoir recours au type de données CLOB (ou NCLOB, le cas échéant).
Sous Oracle, les champs LONG sont utilisés, par exemple, dans le dictionnaire de données pour
enregistrer les définitions de vues ou de codes PL/SQL.
II - LES DONNEES NUMERIQUES
Présentation
Toutes les données numériques sont exécutées par l'intermédiaire d'un type de données : NUMBER.
Définition des positions
La définition des positions avant et après la virgule (Precision et Scale) permet l'enregistrement des
nombres les plus divers. Trente-huit positions significatives répondent également aux applications
technico-scientifiques.
Du fait de l'utilisation de Precision et Scale, le format de sortie peut être défini, et les entrées vérifiées
et, le cas échéant, modifiées ou refusées, comme l'illustre le tableau 2. On y lira également les
conséquences d'un scale négatif. (La valeur par défaut est toujours 1234567,89.)
Nombre Scale
Résultat après SELECT
5, 2
Erreur ORA-01438, car le nombre est trop grand pour le format de numéro.
8, 0
1 234 568 (arrondi automatiquement)
10, –2
1 234 600 (arrondi à 100 = –2)
9, 2
1 234 567,89
12, 4
1 234 567,89
Format variable
Comme le montre le tableau 1, Oracle enregistre les valeurs numériques dans un format variable, 21
octets au maximum étant utilisés. Dans les tables qui doivent enregistrer des nombres très différents
au sein d'une même colonne, il faut éventuellement procéder à une modification de l'espace disque
requis dans la définition de la table.
III - LES DONNEES BINAIRES
Présentation
Les types de données BLOB, CLOB et NCLOB, ainsi que LONG et VARCHAR2 en ce qui concerne
les données de chaînes de caractères ont déjà été évoqués. Pour ce qui est de l'enregistrement des
données binaires, on trouve les types de données BLOB et BFILE ainsi que RAW et LONG RAW.
BLOB et BFILE
Le type de données BLOB enregistre les données binaires jusqu'à une taille maximale de 4 Go, les
données étant enregistrées dans la base de données. Comme pour le type CLOB, le traitement des
données ne peut généralement pas se faire par SQL, mais requiert un pachage approprié.
Fichiers externes
Pour l'essentiel, BFILE est identique à BLOB, excepté le fait que les données ne sont pas
enregistrées dans la base de données, mais dans un fichier externe, auquel renvoie le pointeur dans
BFILE. Principale restriction : les données enregistrées en BFILE sont protégées en écriture vis-à-vis
de la base de données. Elles ne peuvent donc pas être modifiées par les commandes de cette
dernière, mais seulement via une manipulation externe du fichier auquel renvoie le pointeur. C'est
également la raison pour laquelle les données BFILE ne prennent pas part aux transactions.
RAW
RAW est le type de données équivalent à VARCHAR2 pour l'enregistrement des données autres que
celles de jeux de caractères. Mais contrairement à VARCHAR2, RAW ne peut excéder une valeur
maximale de 2 000 (contre 4 000 pour VARCHAR2).
LONG RAW
La forme équivalente de LONG, pour l'enregistrement des données binaires, est LONG RAW. Les
mêmes restrictions que pour LONG s'appliquent. Le type de données à utiliser à la place de LONG
RAW est BLOB ou, le cas échéant, BFILE.
ROWID (UROWID)
On entend par ROWID l'identification créée automatiquement pour les lignes qu'Oracle propose sous
la forme d'une pseudo-colonne dans chaque table. Le type de données ROWID permet d'enregistrer
dans une colonne d'une autre table les ROWID lus dans une pseudo-colonne (bien que cela puisse
poser d'importants problèmes d'intégrité au fil du temps).
Outre les ROWID Oracle8 (qui contiennent également des informations sur les tables partitionnées,
par exemple), les ROWID restreints sont également pris en charge (pour des raisons de compatibilité
avec les versions précédentes d'Oracle).
IV - LES AUTRES TYPES DE DONNEES
DATE
Le type de données DATE est prévu pour l'enregistrement des données de date et d'heure, celui-ci se
faisant en interne dans une valeur. Chaque valeur de date contient donc une indication de l'heure, et
chaque indication d'heure se réfère toujours à une date. En plus de l'année, on enregistre également
le siècle. Le passage à l'an 2000 n'a donc pas posé de problème en principe.
« Ère » et indications de date
Les indications de date sont enregistrées dans la période allant de 1.1.4712 BCE à 31.12.4712
CE, où CE correspond à « Common Era » (après Jésus-Christ) et BCE à « Before Common
Era » (avant Jésus-Christ). Oracle peut, bien sûr, être utilisé dans des régions où les références
temporelles sont différentes.
Les indications de date et d'heure sont enregistrées en interne, dans un format spécial de 7 octets.
Format de date
Par défaut, la date est saisie et éditée conformément au NLS_DATE_FORMAT.
Oracle prend également en charge le passage du calendrier julien en calendrier grégorien.
Heure
Il est important de noter qu'une indication de date est normalement toujours enregistrée avec
l'indication de l'heure. Si, par exemple, une valeur de date est créée avec SYSDATE, la ligne ne
contient pas seulement la date, mais aussi l'heure à laquelle la fonction est appelée. Si SYSDATE est
de nouveau enregistré quelques instants plus tard, les valeurs de la ligne s'en trouvent bien sûr
modifiées, car les données correspondant à l'heure ont changé. Il n'est donc pas possible de placer
une clé primaire (PRIMARY KEY) ayant SYSDATE comme valeur par défaut dans une colonne de
date : si une ligne est insérée exactement à la même date et à la même heure, un conflit de clé
pourrait survenir.
Téléchargement