0% ont trouvé ce document utile (0 vote)
3 vues18 pages

Collections et Types en PL/SQL

Transféré par

madjiguene80
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
3 vues18 pages

Collections et Types en PL/SQL

Transféré par

madjiguene80
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Collections de Type Record

◼ Une variable de type record peut représenter une ligne d’une table relationnelle.

◼ TYPE type_var IS RECORD (


 nom_champ1 type_champ1 [[NOT NULL] := exp],

 nom_champn type_champn [[NOT NULL] := exp]

 );

◼ nom_var type_var ;

◼ Exemple:

◼ Type PERSONNE IS RECORD(


 nom VARCHAR2(15),

 prenom VARCHAR2(20));

◼ p PERSONNE ; -- champs [Link], [Link]


M. DIAW ADMIN BD
Utilisation des types implicites
◼ attribut %type : signifie du même type que
v1 [Link]%type ;

 -- v1 du même type que la colonne nom

 -- de la table Employe

v2 v1%type ; -- v2 du même type que v1

◼ RefProd CHAR(5) ;

◼ RefClient RefProd%type ; -- RefClient est du même type que RefProd

M. DIAW ADMIN BD
Utilisation des types implicites
◼ attribut %rowtype : signifie du même type
structuré (record) que

◼ emp_rec Employe%rowtype ;

◼ -- emp_rec est de type record

◼ -- ses attributs suivent le schéma de Employe

M. DIAW ADMIN BD
Collection de Type Tableaux (TABLE)
◼ Un tableau PL/SQL
collectionordonnée d’éléments du même type dont les indices ne sont pas
forcément contigus
accessibles uniquement en PL/SQL
 peuvent grandir dynamiquement (on ne connait pas à l’avance la taille du tableau)

◼ TYPE Type_nom_tableau IS TABLE OF datatype [NOT NULL] INDEX BY


BINARY_INTEGER;
 nom_tableau: nom du tableau
 Datatype: type des éléments du tableau (curseur, record, type scalaire, ...)

◼ Declaration : mon_tableau nom_tableau;

M. DIAW ADMIN BD
Collection de Type Tableaux (TABLE)
◼ Type TYPE_Tab_Number
IS TABLE OF Number INDEX BY BINARY_INTEGER;--- tableau d’entiers
(nombres)

◼ Type PERSONNE IS RECORD(


nom VARCHAR2(15),

prenom VARCHAR2(20));

◼ Type Type_Tab_Personne IS TABLE OF Personne INDEX BY BINARY_INTEGER

◼ T1 Type_Tab_Personne;
 T1(1).nom:=’Diaw’;
 T1(1).prenom:=’Moussa’;
M. DIAW ADMIN BD
Collections de Type Table

◆ VARRAY: Tableau dont on connaît le nombre d’éléments

◆ TYPE nom_type IS VARRAY (taille) OF type_colonne | type_record

◆ Ex: TYPE Type_tab_emp IS VARRAY (50) OF Employe%ROWTYPE;

◼ tab1 Type_tab_emp; -- déclaration de la variable

M. DIAW ADMIN BD
Description des attributs d’un Tableau
Fonction Description
[Link] Le nombre d’éléments de T
[Link] Supprime tout le tableau
[Link](n) Supprime l’élément à la position N
[Link] (n,m) supprime les éléments de la position N à la position M

[Link](n) retourne true si l’élément à la position N existe


[Link] Indice de la première position
[Link] Indice de la dernière position
[Link] (N) Position suivant l’indice N
[Link](N) Position avant l’indice N

M. DIAW ADMIN BD
Exemple d’utilisation des tableaux
SET SERVEROUTPUT ON
Declare
Type Type_Tab_Number is table of Number index by binary_integer;
T1 Type_Tab_Number; i number;
BEGIN
i :=1;
Loop
T1(i):=i; i := i + 1,
exit when i>10 ;
end loop;
dbms_output.put_line (‘Premier élément : '||T1([Link]) );
dbms_output.put_line (‘Dernier élément : '||T1([Link]) );
dbms_output.put_line (‘Nombre d’’éléments de T1 avant suppression: '||[Link]);
dbms_output.put_line (‘Suppresion des éléments de la position
'||[Link]([Link])||' à la postition '||[Link]([Link]));
[Link]([Link]([Link]), [Link]([Link]));
dbms_output.put_line (‘Nombre d’éléments deT1 après suppression : '||[Link]);
END; M. DIAW ADMIN BD
Exemple d’utilisation des tableaux
DECLARE
i number(2);
Type Type_tab_Number is varray(12) of number;
tab Type_tab_Number;
BEGIN’
for i in 1..12 loop tab(i):=(2*i); end loop;
dbms_output.put_line('Nombre d’éléments du tableau avant suppression: '||[Link]);
[Link]([Link]);
dbms_output.put_line(‘Nombre d’éléments du tableau après suppression: ‘||[Link]);
for i in [Link] . .[Link] loop
if ([Link](i)) then
dbms_output.put_line(i||' '||tab(i));
end if;
end loop;
end; M. DIAW ADMIN BD
/
Notion de sous-type
◼ Chaque type de données PL/SQL prédéfini a ses caractéristiques (domaine, opérateurs, ...)

◼ Un sous-type d’un type de base permet d’en restreindre certaines de ses caractéristiques.

◼ sous-types prédéfinis en PL/SQL servant à rendre les applications compatibles avec la norme SQL
(CHARACTER, INTEGER, POSITIVE, . . .).

◼ L’utilisateur peut définir ses propres sous-types.


 SUBTYPE nomSousType IS TypeDeBase [NOT NULL];

 subtype DATE_NAISS_TYPE is DATE NOT NULL ;

 subtype NOMBRE_TYPE is NUMBER(1,0) -- entre -9 et +9

 subtype MARQUE_TYPE is [Link]%type

 -- type de la colonne Maque de la table Voiture

M. DIAW ADMIN BD
Conversion de types
◼ Comme en SQL, Oracle autorise des conversions implicites
ou explicites.

◼ une_date DATE := ’27-11-2007’;

◼ une_chaine VARCHAR2(20) := sysdate ;


◼ date1 DATE:= to_date(’10/11/12’,’DD/MM/YY’);

M. DIAW ADMIN BD
Les structures de contrôle
L’instruction Si alors
condition then
◼ if
 instr
 [elsif condition then
 instr]
[else
instr]
◼ end if ;

M. DIAW ADMIN BD
Les structures de contrôle
La boucle Pour
◼ For indice in [reverse] debut .. Fin loop
Instruction;
◼ end loop;
NB: Dans la boucle for l’indice est incrémenté par le
système
• sans REVERSE : indice varie de debut à Fin, pas de 1
• Avec REVERSE : indice varie de Fin à debut, pas de -1

M. DIAW ADMIN BD
Exemple Factorielle de 9: Boucle FOR
◼ SETSERVEROUTPUT ON
◼ DECLARE
factnumber := 1 ;
i number(2);

◼ BEGIN
FOR i IN 1..9 LOOP
◼ fact := fact * i ;
◼ END LOOP;

 DBMS_OUTPUT.PUT_LINE(‘Factorielle de 9 est : ’ ||fact) ;

◼ END;
◼/
M. DIAW ADMIN BD
Les structures de contrôle
La boucle Tant que

◼While condition loop


Instruction;
◼end loop;

M. DIAW ADMIN BD
Reste de la division de 10 par 3
◼ SETSERVEROUTPUT ON
◼ DECLARE
reste number := 10 ;
◼ BEGIN
WHILE reste >= 3 LOOP
◼ reste := reste - 3 ;
END LOOP;
 DBMS_OUTPUT.PUT_LINE(‘Le reste de la division de 10 par 3 est: ‘||reste);

◼ END;
◼/
M. DIAW ADMIN BD
Les structures de contrôle
La boucle Répéter
◼Loop
Instruction;
Exit when condition;
◼end loop;

M. DIAW ADMIN BD
Insertion dans la table Resulat : Loop
◼ CREATE TABLE Resultat (nombre number(2));
◼ DECLARE
 nbre number(2) := 1 ;
◼ BEGIN
 LOOP
◼ insert into resultat values (nbre);

◼ nbre := nbre +1 ;

◼ EXIT WHEN nbre > 10 ;

 END LOOP ;
◼ END ;
◼/
◼ Select * FROM Resultat;
◼ Truncate Table Resultat;

M. DIAW ADMIN BD

Vous aimerez peut-être aussi