Types et structures de données en PL/SQL

Typage et déclaration de variable simples

les collections de type RECORD

Les collections de type TABLE ou VARRAY

méthodes communes

 

Typage et déclaration de variables simples

nomvar [constant] type [NOT NULL] [:= valeur | DEFAULT expression ]

X NUMEBR NOT NULL :=10.40;
C VARCHAR(100) := 'Coucou';
N CONSTANT INTEGER DEFAULT 100;
V BOOLEAN := TRUE;

Il existe plusieurs catégories de types de variables :

+ type 'dynamique' %TYPE
qui définit une var du type de la colonne d'une table existante

nom emp.ename%TYPE

Les collections de type RECORD

Permettent de déclarer une variable de type 'enregistrement' ou 'ligne' d'une table, c'est donc un type structuré décomposable en colonnes élémentaires.

TYPE type_enr IS RECORD (liste_de_types_ave_%TYPE_ou_non | nom_table%ROWTYPE)

DECLARE
TYPE t_rec_emp IS RECORD
(nom emp.ename%TYPE, salaire emp.sal%TYPE,comission emp.comm%TYPE);
rec_emp t_rec_emp;

les RECORDS peuvent être imbriqués et contenir d'autres RECORDS

Les records peuvent être affectés de manière élémentaire, chmap par champ ou de manière globale grace à un SELECT INTO :

rec_emp.salaire := 2400;
SELECT * INTO rec_emp FROM emp
WHERE empno = &no_saisi;

Les collections TABLE

Une table PL/SQL

Définition :
TYPE nom_tableau_pl IS TABLE OF datatype [NOT NULL]
INDEX BY BINARY_INTEGER;
nom_tableau_pl nom du tableau
datatype type (curseur, record, variable...)

Declaration :
mon_tableau nom_tableau_pl ;

Tableau de 2 entiers

-- table de multiplication par 8 et par 9...
declare
type tablemul is record ( par8 number, par9 number);
type tabledentiers is table of tablemul index by binary_integer;
ti tabledentiers;
i number;
begin
for i in 1..10 loop
ti(i).par9 := i*9 ;
ti(i).par8:= i*8;
dbms_output.put_line (i||'*8='||ti(i).par8||' '||
i||'*9='||ti(i).par9 );
end loop;
end;
/

Tableau de champs numeriques

-- on va lire les salaires de emp...
declare
type tsal is table of emp.sal%type index by binary_integer;
tasal tsal;
i number;
cursor cur is select sal from emp;
begin
open cur;
i :=1;
loop
exit when cur%notfound;
fetch cur into tasal(i) ;
dbms_output.put_line ('salaire ...'||tasal(i));
i := i + 1;
end loop;
end;
/

Les collections VARRAY


TYPE nom_type IS VARRAY (taille) OF type_colonne | type_record

TYPE t_tab_emp IS VARRAY (1000) OF emp%ROWTYPE;
tab_emp t_tab_emp; -- déclaration de la variable !

 

Description des attributs / méthodes des TABLES et VARRAY PL/SQL

nom_table_sql.COUNT retourne le nombre d’élements de la table
nom_table_sql.DELETE supprime toute la table
nom_table_sql.DELETE (n) supprime l’élément n
nom_table_sql.DELETE (n,m) supprime les éléments de n à m
nom_table_sql.EXISTS (n) retourne TRUE si l’élément n existe
nom_table_sql.EXTEND  
nom_table_sql.EXTEND  
nom_table_sql.EXTEND  
nom_table_sql.FIRST retourne le premier index
nom_table_sql.LAST retourne la valeur du dernier index
nom_table_sql.TRIM élément suivant
nom_table_sql.TRIM(n)  
nom_table_sql.NEXT(n)  
nom_table_sql.PRIOR(n) élément précédent

Utilisation des attributs / méthodes de TABLES et VARRAY


declare
type tsal is table of emp.sal%type index by binary_integer;
tasal tsal;
i number;
cursor cur is select sal from emp;
begin
open cur;
i :=1;
loop
exit when cur%notfound;
fetch cur into tasal(i) ;
i := i + 1;
end loop;
close cur;
dbms_output.put_line ('premier élément : '||tasal(tasal.FIRST) );
dbms_output.put_line ('dernier élément : '||tasal(tasal.LAST) );
dbms_output.put_line ('nombre d élément : '||tasal.COUNT);
dbms_output.put_line ('suppresion des éléments '||tasal.next(1)||' à '||tasal.prior(tasal.COUNT));
tasal.delete(2,tasal.COUNT-1);
dbms_output.put_line ('nombre d élément : '||tasal.COUNT);
end;
/

 

(c) 2002- 2005 Didier Deléglise
(c) 2002- 2006 Didier Deléglise


modifié
le 20/11/2006

Ecrire a DD
ecris
moi


les forums techniques Oracle

mon BLOG Oracle,
en Francais
connaitre DD
l'autre vie
de DD

mon CV

trucs
et astuces

JOBs Oracle
du jour
Homepage "Tout sur Oracle"
Mon site :
Tout sur Oracle (et le web)
Copyright (C) 2002
Utilisation de ces documents