Conception Et Réalisation (Oracle) by Grare Stéphane - HTML preview

PLEASE NOTE: This is an HTML preview only and some elements such as links or page numbers may be incorrect.
Download the book in PDF, ePub, Kindle for a complete version.

Les types simples

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

index-111_1.png

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 ;