![Free-eBooks.net](/resources/img/logo-nfe.png)
![All New Design](/resources/img/allnew.png)
Les types simples dans PL/SQL sont nombreux. Les principaux sont :
- Pour les types numériques : REAL, INTEGER, NUMBER (précision de 38 chiffres par
défaut), NUMBER(x) (nombres avec x chiffres de précision), NUMBER(x,y) (nombres avec x
chiffres de précision dont y après la virgule).
- Pour les types alphanumériques : CHAR(x) (chaîne de caractère de longueur fixe x),
VARCHAR(x) (chaîne de caractère de longueur variable jusqu’à x), VARCHAR2 (idem que
précédent excepté que ce type supporte de plus longues chaînes et que l’on n’est pas obligé
de spécifier sa longueur maximale). PL/SQL permet aussi de manipuler des dates (type
DATE) sous différents formats.
Une autre spécificité du PL/SQL est qu’il permet d’assigner comme type à une variable celui
d’un champ d’une table (par l’opérateur %TYPE) ou d’une ligne entière (Opérateur
%ROWTYPE). Dans la déclaration suivante :
DECLARE
nom emp.name%TYPE;
employe emp%ROWTYPE;
110
La variable nom est défini comme étant du type de la colonne « name » de la table emp (qui
doit exister au préalable). De même, employe est un vecteur du type d’une ligne de la table
emp. À supposer que cette dernière ait trois champs numero, name, age de type respectifs
NUMBER, VARCHAR, INTEGER, la variable employe disposera de trois composantes :
employe.numero, employe.name, employe.age, de même types que ceux de la table.
Sous types PL/SQL propose des sous-types synonymes des types simples. Ces sous-types
permettent d’assurer la compatibilité avec les types standards ANSI/ISO et IBM.
Les types composés
Il existe 3 modèles de types de données composées : RECORD, TABLE et VARRAY. Ils vont
servir à définir, dans une première phase, des types structurés. On se référera, dans une
seconde phase, à ces types lors de la déclaration des variables.
RECORD : Permet de définir des types structurés destinés à contenir une seule ligne à
plusieurs colonnes.
TYPE nom_type IS RECORD (champl {type_scalaire | identifiant%TYPE} [champ2
{type_scalaire | identifiant%TYPE}...]);
Déclaration de la variable
Variable nom_type
Exemple :
TYPE enreg IS RECORD (nom client.raisonsociale%TYPE, commande
commande.numcom%TYPE, livraison DATE);
comcli enreg ;
comcli est une variable de type composé ' enreg' et contient les champs nom, commande,
livraison.
TABLE : Permet de définir des types tableau à 2 colonnes, dont l'une des colonnes sera
obligatoirement une clé primaire. Cette clé permettra d'accéder aux lignes du tableau comme
un indice.
TYPE nom_type IS TABLE OF {type_colonne | table.colonne%TYPE} INDEX BY
BINARY_INTEGER;
Déclaration de la variable
Variable nom_type;
Exemple :
TYPE typeraisoc IS TABLE OF Client.raisonsociale%TYPE INDEX BY
BINARY_INTEGER;
nom_societe typeraisoc ;
nom-societe est une variable de type composé typeraisoc contenant une colonne de type
identique à la colonne raisonsociale de la table client.
111
Nom_societe(l) :='DARTY';
nom_societe(2) :='CARREFOUR';
On ne peut définir qu'une seule colonne. Par contre, cette colonne peut être de type record.
Exemple :
TYPE typeraisoc IS TABLE OF Client%ROWTYPE INDEX BY BINARY_INTEGER;
nom_societe typeraisoc ;
nom_societe(l).raisonsociale := 'DARTY';
nom_societe(l).ville :='PARIS';
nom_societe(2).raisonsociale :='CARREFOUR';
nom_societe(2).ville :='MARSEILLE';
VARRAY : Une collection de type VARRAY possède une dimension maximale qui doit être
précisée lors de la déclaration de la collection. Ces collections possèdent une longueur fixe et
donc la suppression d’éléments ne permet pas de gagner de la place en mémoire. Les
éléments sont numérotés à partir de la valeur 1.
TYPE nom_type IS VARRAY (taille_maxi) OF type_element [NOT_NULL]
nom_type : Représente le nom de la collection
taille_maxi : Nombre d’éléments maximum présent dans la collection
type_element : Représente le type de données des éléments de la collection.
Exemple :
Déclaration et utilisation de collections :
DECLARE
TYPE calendier is VARRAY(366) OF DATE ;
Annee calendrier := calendrier (tp_date(‘01/01/2007’,’DD/MM/YYYY’));
BEGIN
-- changement de valeur
Annee(1) := calendrier (tp_date(‘01/01/2008’,’DD/MM/YYYY’));
END ;