Chapitre 3
Chapitre 3
Chapitre 3
ENSA Hoceima
2021/2022
1
Contenu du chapitre
• Les curseurs
• Records (Enregistrements )
2
Méthodes pour collection
nom_collection.nom_methode[(paramètres)]
3
Méthodes pour collection
4
Méthodes pour collection
5
Méthodes pour collection
tables imbriquées.
6
Méthodes pour collection
procédure.
7
Méthodes pour collection
8
Méthodes pour collection
9
Table VARRAY : les fonctions – Exemple
DECLARE
TYPE t IS VARRAY(7) OF VARCHAR2(10) ;
ta t := t();
BEGIN
ta.EXTEND(5);
ta(1):='Hi';
ta(2):='Every';
ta(3):='One';
ta(4):='and ';
ta(5):='welcom';
DBMS_OUTPUT.PUT_LINE('Le premier indice est ' || ta.FIRST());
DBMS_OUTPUT.PUT_LINE('Le dernier indice est ' || ta.LAST());
DBMS_OUTPUT.PUT_LINE('Le nombre des élements est ' || ta.COUNT());
DBMS_OUTPUT.PUT_LINE('Le maximum nombre des elements ' || ta.LIMIT());
DBMS_OUTPUT.PUT_LINE('Indice avant indice 3 est ' || ta.PRIOR(3));
DBMS_OUTPUT.PUT_LINE('Indice apres indice 3 est ' || ta.NEXT(3));
ta.TRIM(2);
DBMS_OUTPUT.PUT_LINE('Le dernier indice est ' || ta.LAST());
DBMS_OUTPUT.PUT_LINE( 'Indice existence ' || sys.DIUTIL.bool_to_int(ta.EXISTS(8)));
ta.EXTEND(2,1);
DBMS_OUTPUT.PUT_LINE('Indice de 5 ' || ta(5));
--ta.DELETE(2); /* pas applicable*/
--ta.DELETE(4,5); /* pas applicable*/
END;
/
10
Table VARRAY : les fonctions – Exemple (Affichage)
Affichage:
Le premier indice est 1
DECLARE
TYPE t IS VARRAY(7) OF VARCHAR2(10) ;
Le dernier indice est 5
ta t := t(); Le nombre des élements est 5
BEGIN Le maximum nombre des elements 7
ta.EXTEND(5); Indice avant indice 3 est 2
ta(1):='Hi'; Indice apres indice 3 est 4
ta(2):='Every'; Le dernier indice est 3
ta(3):='One';
Indice existence 0
ta(4):='and ';
ta(5):='welcom';
Indice de 5 Hi
DBMS_OUTPUT.PUT_LINE('Le premier indice est ' || ta.FIRST());
DBMS_OUTPUT.PUT_LINE('Le dernier indice est ' || ta.LAST());
DBMS_OUTPUT.PUT_LINE('Le nombre des élements est ' || ta.COUNT());
DBMS_OUTPUT.PUT_LINE('Le maximum nombre des elements ' || ta.LIMIT());
DBMS_OUTPUT.PUT_LINE('Indice avant indice 3 est ' || ta.PRIOR(3));
DBMS_OUTPUT.PUT_LINE('Indice apres indice 3 est ' || ta.NEXT(3));
ta.TRIM(2);
DBMS_OUTPUT.PUT_LINE('Le dernier indice est ' || ta.LAST());
DBMS_OUTPUT.PUT_LINE( 'Indice existence ' || sys.DIUTIL.bool_to_int(ta.EXISTS(8)));
ta.EXTEND(2,1);
DBMS_OUTPUT.PUT_LINE('Indice de 5 ' || ta(5));
--ta.DELETE(2); /* pas applicable*/
--ta.DELETE(4,5); /* pas applicable*/
END;
/
11
Table impriqué: les fonctions - Exemple
DECLARE
TYPE t IS TABLE OF VARCHAR2(10) ;
ta t := t();
BEGIN
ta.EXTEND(5);
ta(1):='Hi';
ta(2):='Every';
ta(3):='One';
ta(4):='and ';
ta(5):='welcom';
DBMS_OUTPUT.PUT_LINE('Le premier indice est ' || ta.FIRST());
DBMS_OUTPUT.PUT_LINE('Le dernier indice est ' || ta.LAST());
DBMS_OUTPUT.PUT_LINE('Le nombre des élements est ' || ta.COUNT());
DBMS_OUTPUT.PUT_LINE('Le maximum nombre des elements ' || ta.LIMIT());
DBMS_OUTPUT.PUT_LINE('Indice avant indice 3 est ' || ta.PRIOR(3));
DBMS_OUTPUT.PUT_LINE('Indice apres indice 3 est ' || ta.NEXT(3));
ta.TRIM(2);
DBMS_OUTPUT.PUT_LINE('Le dernier indice apre TRIM' || ta.LAST());
DBMS_OUTPUT.PUT_LINE( 'Indice existence ' || sys.DIUTIL.bool_to_int(ta.EXISTS(8)));
ta.EXTEND(2,1);
DBMS_OUTPUT.PUT_LINE('Indice de 5 ' || ta(5));
DBMS_OUTPUT.PUT_LINE('Le dernier indice apres EXTEND ' || ta.LAST());
ta.DELETE(2); /* Supprimer element de d'indice 2*/
ta.DELETE(4,5); /* Supprimer les element entre des indices 4 et 5*/
END;
/
12
Table impriqué: les fonctions - Exemple
Le premier indice est 1
DECLARE
Le dernier indice est 5
TYPE t IS TABLE OF VARCHAR2(10) ; Le nombre des éléments est 5
ta t := t(); Le maximum nombre des éléments
BEGIN Indice avant indice 3 est 2
ta.EXTEND(5); Indice après indice 3 est 4
ta(1):='Hi'; Le dernier indice après TRIM 3
ta(2):='Every';
Indice existence 0
ta(3):='One';
ta(4):='and ';
Indice de 5 Hi
ta(5):='welcom'; Le dernier indice après EXTEND 5
DBMS_OUTPUT.PUT_LINE('Le premier indice est ' || ta.FIRST());
DBMS_OUTPUT.PUT_LINE('Le dernier indice est ' || ta.LAST());
DBMS_OUTPUT.PUT_LINE('Le nombre des élements est ' || ta.COUNT());
DBMS_OUTPUT.PUT_LINE('Le maximum nombre des elements ' || ta.LIMIT());
DBMS_OUTPUT.PUT_LINE('Indice avant indice 3 est ' || ta.PRIOR(3));
DBMS_OUTPUT.PUT_LINE('Indice apres indice 3 est ' || ta.NEXT(3));
ta.TRIM(2);
DBMS_OUTPUT.PUT_LINE('Le dernier indice apre TRIM' || ta.LAST());
DBMS_OUTPUT.PUT_LINE( 'Indice existence ' || sys.DIUTIL.bool_to_int(ta.EXISTS(8)));
ta.EXTEND(2,1);
DBMS_OUTPUT.PUT_LINE('Indice de 5 ' || ta(5));
DBMS_OUTPUT.PUT_LINE('Le dernier indice apres EXTEND ' || ta.LAST());
ta.DELETE(2); /* Supprimer element de d'indice 2*/
ta.DELETE(4,5); /* Supprimer les element entre des indices 4 et 5*/
END;
/ 13
Table associative : les fonctions - Exemple
DECLARE
TYPE t IS TABLE OF VARCHAR2(10) INDEX BY PLS_INTEGER;
--ta t := t();
ta t ;
BEGIN
--ta.EXTEND(5); /* n’est pas applicable*/
ta(1):='Hi';
ta(2):='Every';
ta(4):='One';
ta(5):='and ';
ta(9):='welcom';
DBMS_OUTPUT.PUT_LINE('Le premier indice est ' || ta.FIRST());
DBMS_OUTPUT.PUT_LINE('Le dernier indice est ' || ta.LAST());
DBMS_OUTPUT.PUT_LINE('Le nombre des élements est ' || ta.COUNT());
DBMS_OUTPUT.PUT_LINE('Le maximum nombre des elements ' || ta.LIMIT());
DBMS_OUTPUT.PUT_LINE('Indice avant indice 3 est ' || ta.PRIOR(3));
DBMS_OUTPUT.PUT_LINE('Indice apres indice 3 est ' || ta.NEXT(3));
--ta.TRIM(2); /* n’est pas applicable*/
DBMS_OUTPUT.PUT_LINE('Le dernier indice apre TRIM' || ta.LAST());
DBMS_OUTPUT.PUT_LINE( 'Indice existence ' || sys.DIUTIL.bool_to_int(ta.EXISTS(8)));
--ta.EXTEND(2,1); /* inapplicable*/
ta.DELETE(2); /* Supprimer element de d'indice 2*/
ta.DELETE(6,9); /* Supprimer les element entre des indices 6 et 9*/
DBMS_OUTPUT.PUT_LINE('Le nombre des élements apres delete est ' || ta.COUNT());
END;
/
14
Table associative : les fonctions - Exemple
DECLARE Le premier indice est 1
TYPE t IS TABLE OF VARCHAR2(10) Le dernier indice est 9
INDEX BY PLS_INTEGER; Le nombre des élements est 5
--ta t := t();
ta t ;
Le maximum nombre des elements
BEGIN Indice avant indice 3 est 2
--ta.EXTEND(5); /* n’est pas applicable*/ Indice apres indice 3 est 4
ta(1):='Hi'; Le dernier indice apre TRIM9
ta(2):='Every'; Indice existence 0
ta(4):='One'; Le nombre des élements apres delete 3
ta(5):='and ';
ta(9):='welcom';
DBMS_OUTPUT.PUT_LINE('Le premier indice est ' || ta.FIRST());
DBMS_OUTPUT.PUT_LINE('Le dernier indice est ' || ta.LAST());
DBMS_OUTPUT.PUT_LINE('Le nombre des élements est ' || ta.COUNT());
DBMS_OUTPUT.PUT_LINE('Le maximum nombre des elements ' || ta.LIMIT());
DBMS_OUTPUT.PUT_LINE('Indice avant indice 3 est ' || ta.PRIOR(3));
DBMS_OUTPUT.PUT_LINE('Indice apres indice 3 est ' || ta.NEXT(3));
--ta.TRIM(2); /* n’est pas applicable*/
DBMS_OUTPUT.PUT_LINE('Le dernier indice apre TRIM' || ta.LAST());
DBMS_OUTPUT.PUT_LINE( 'Indice existence ' || sys.DIUTIL.bool_to_int(ta.EXISTS(8)));
--ta.EXTEND(2,1); /* inapplicable*/
ta.DELETE(2); /* Supprimer element de d'indice 2*/
ta.DELETE(6,9); /* Supprimer les element entre des indices 6 et 9*/
DBMS_OUTPUT.PUT_LINE('Le nombre des élements apres delete est ' || ta.COUNT());
END;
/
15
Les curseurs
16
Les curseurs
17
Les curseurs
18
Les curseurs
Curseur explicite
4 étapes :
- Déclaration du curseur
- Ouverture du curseur
- Fermeture du curseur
19
Les curseurs
Syntaxe :
20
Les curseurs
Syntaxe :
OPEN nom_curseur ;
21
Les curseurs
Syntaxe :
22
Les curseurs
Syntaxe :
CLOSE nom_curseur ;
23
Les attributs d'un curseur
24
Les attributs d'un curseur : %FOUND
TRUE
TRUE
25
Les attributs d'un curseur : %NOTFOUND
TRUE
TRUE
26
Les attributs d'un curseur : %ISOPEN
utilisation.
27
Les attributs d'un curseur : %ROWCOUNT
28
Curseur implicite : Exemple
DECLARE
nb_lignes INTEGER;
BEGIN
nb_lignes := SQL%ROWCOUNT;
29
Curseur implicite : Exemple
DECLARE
nbLignes NUMBER(2);
op BOOLEAN;
BEGIN
UPDATE emp SET sal = sal + 0;
op := SQL%ISOPEN;
IF SQL%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE('Pas des lignes modififées');
ELSIF SQL%FOUND THEN
nbLignes := SQL%ROWCOUNT;
END IF;
DBMS_OUTPUT.PUT_LINE('nombe de lignes'|| nbLignes );
DBMS_OUTPUT.PUT_LINE( ' Open ' || sys.DIUTIL.bool_to_int(op));
END;
/
30
Les curseurs - Curseur explicite – Exemple
DECLARE
CURSOR moncurseur IS SELECT ename,sal FROM emp WHERE deptno=10;
salaire emp.sal%TYPE;
nom emp.ename%TYPE;
BEGIN
OPEN moncurseur;
FETCH moncurseur INTO nom,salaire;
DBMS_OUTPUT.PUT_LINE(nom);
FETCH moncurseur INTO nom,salaire;
DBMS_OUTPUT.PUT_LINE( nom);
CLOSE moncurseur;
END;
/
31
Les curseurs - Curseur explicite – Exemple
DECLARE
CURSOR moncurseur IS SELECT ename,sal FROM emp WHERE deptno=10;
salaire emp.sal%TYPE;
nom emp.ename%TYPE;
BEGIN
OPEN moncurseur;
FETCH moncurseur INTO nom,salaire;
DBMS_OUTPUT.PUT_LINE(nom);
FETCH moncurseur INTO nom,salaire;
DBMS_OUTPUT.PUT_LINE( nom);
CLOSE moncurseur;
END;
KING
/ CLARK
32
Les curseurs - Curseur explicite – Exemple
DECLARE
CURSOR moncurseur IS SELECT ename,sal FROM emp WHERE deptno=10;
salaire emp.sal%TYPE;
nom emp.ename%TYPE;
BEGIN
OPEN moncurseur;
LOOP
FETCH moncurseur INTO nom,salaire;
EXIT WHEN moncurseur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE( nom || ' ' || salaire);
END LOOP;
CLOSE moncurseur;
END;
/
33
Déclaration de variables
34
Simplification d'écriture
• Déclaration de variables
nom_structure.nom_colonne;
35
Simplification d'écriture – Exemple
DECLARE
CURSOR moncurseur IS SELECT ename,sal FROM emp WHERE deptno=10;
nom_structure moncurseur%ROWTYPE;
BEGIN
OPEN moncurseur;
LOOP
FETCH moncurseur INTO nom_structure;
EXIT WHEN moncurseur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(nom_structure.ename || ' ' || nom_structure.sal);
END LOOP;
CLOSE moncurseur;
END;
/
36
Curseur avec FOR LOOP
• "FOR LOOP" peut être utilisée pour travailler avec des curseurs.
curseur.
LOOP.
37
Curseur avec FOR LOOP– Exemple
DECLARE
CURSOR moncurseur IS SELECT ename,sal FROM emp WHERE deptno=10;
nom_structure moncurseur%ROWTYPE;
BEGIN
FOR nom_structure IN moncurseur LOOP
EXIT WHEN moncurseur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE( nom_structure.ename);
END LOOP;
END;
/
38
Les enregistrements (RECORDS)
39
Les enregistrements
40
Les enregistrements
curseur explicite.
41
Un enregistrement défini par l’utilisateur
….
);
nom_var_record nom_type;
42
un enregistrement défini par l’utilisateur – Exemple
DECLARE
type ligneEmp IS RECORD (
nom varchar2(50),
metier emp.job%type,
salaire emp.sal%type );
mavar ligneEmp;
BEGIN
select ename,job, sal into mavar.nom,mavar.metier,mavar.salaire FROM emp WHERE
empno=7839;
DBMS_OUTPUT.PUT_LINE('le nom est ' || mavar.nom);
END;
/
43
un enregistrement basé sur le table
44
un enregistrement basé sur le table – Exemple
DECLARE
ligneEMP emp%ROWTYPE;
BEGIN
SELECT * INTO ligneEMP FROM emp WHERE
empno=7839;
DBMS_OUTPUT.PUT_LINE('le nom est ' || ligneEMP.ename);
END;
/
45
un enregistrement basé sur le curseur
46
un enregistrement basé sur le curseur – Exemple
DECLARE
CURSOR nom_curseur IS SELECT * FROM emp;
ligneEMP nom_curseur%ROWTYPE;
BEGIN
OPEN nom_curseur;
LOOP
FETCH nom_curseur INTO ligneEMP;
EXIT WHEN nom_curseur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('le nom est ' || ligneEMP.ename);
END LOOP;
END;
/
47