Académique Documents
Professionnel Documents
Culture Documents
TP3
2 Preparation
DECLARE
nom CHAR(15);
numero NUMBER;
date_jour DATE;
salaire NUMBER(7,2);
pi constant Number(4,2):=3.14
8 Fast example
Declare
var1 number := 10;
Begin
Dbms_Output.Put_Line('La valeur de la variable = ' || var1);
End;
Creation des tables
12
Commit;
Confirmer l’insertion des
enregistrements
Begin
Select u.nom
Into v_Name
From utilisateur U
Where U.U_ID = v_util_id;
----
Dbms_Output.Put_Line('v_Name= ' || v_Name);
End;
16 Le type de données %Rowtype
Declare
v_util_id utilisateur.U_id%Type :=11;
-- Declare a variable
-- Is row type of utilisateur table.
v_row utilisateur%Rowtype;
Begin
Select * Into v_row From utilisateur U Where U.U_Id = v_util_Id;
----
Dbms_Output.Put_Line(' Name= ' || v_row.nom);
Dbms_Output.Put_Line('Ville= ' || v_row.ville);
Exception
When No_Data_Found Then
-- When SELECT .. INTO statement returns nothing.
Dbms_Output.Put_Line('No data with U_id= ' || v_util_Id);
End;
17 Le type de données Record
-- Syntax:
TYPE <Table_Name>
IS TABLE OF <Data_Type> [NOT NULL]
INDEX BY BINARY_INTEGER;
-- Example
-- Define TABLE data type, contains elements of type VARCHAR2 (50)
TYPE My_Tbl
IS TABLE OF Varchar2(50)
INDEX BY BINARY_INTEGER;
Attributs de type table
Declare
-- Define TABLE data type:
Type My_Tbl Is Table Of Varchar2(50) Index By Binary_Integer;
-- Define varable of type My_Tbl.
v_utils My_Tbl;
Begin
v_utils(1) := 'One';
v_utils(2) := 'Two';
v_utils(3) := 'Three';
Dbms_Output.Put_Line('Element Count = ' || v_utils.Count);
For i In v_utils.First .. v_utils.Last Loop
Dbms_Output.Put_Line('Element at ' || i || ' = ' || v_utils(i));
End Loop;
End;
23 Type de données Varray
Syntaxe Example
-- declare an array, declare an array of 5 elements, and elements of type
-- Define Array data type VARCHAR2(10);
TYPE <varray_type_name> TYPE villearray
IS VARRAY(5)
IS VARRAY(n) OF Varchar2(10);
OF <element_type>;
24 Type de données Varray
Declare
-- Define Array data type.
-- containing data type of VARCHAR2 (50)
Type U_Array Is Varray(5) Of Varchar2(50);
-- Define Array data type, containing data type of Integer
Type Salary_Array Is Varray(5) Of Integer;
---
v_Names U_Array;
v_Count Integer;
Begin
-- Initialize the value of array elements.
v_Names := U_Array('Mourad'
,'Ahmed'
,'Houda'
,'Noura'
,'Merieme');
-- Element count.
v_Count := v_Names.Count;
Dbms_Output.Put_Line('Count = ' || v_Count);
---
For i In 1 .. v_Count Loop
Dbms_Output.Put_Line('Uloyee = ' || v_Names(i));
End Loop;
End;
25 Travail demandé
Ecrire 2 scripts PL/SQL
Script 1: affiche les différentes propriétés de d’une structure tableau PL/SQL
Script 2: affiche les différentes propriétés de d’une structure varray PL/SQL
v_idx:=v_tbl.prior(2
• PRIOR Renvoie l'index de la ligne précédente dans le tableau avant.
);
26 If/else, Boucles
Syntaxe
IF <condition 1> THEN
Job 1;
[ELSIF <condition 2> THEN
Job 2;]
[ELSE
Job n + 1;]
END IF;
27 Boucle Loop
x := 0;
LOOP y:=10;
-- Do something here Loop
EXIT WHEN <Condition>; x := x + 1;
END LOOP; y := y - x;
Exit When x > y;
End Loop;
Ecrire un petit script qui affiche la valeur de x et y a
chaque iteration
28 Boucle Loop for
Cursor
Implicit Explicit
31 Cursor Oracle (implicit cursor)
32 Cursors
Cursor est un type de variable structurée qui nous permet de traiter des données avec
différentes lignes.
Le nombre de lignes dépend de l'instruction d'interrogation de données après la ligne.
33
34 Explicit Cursor
Declare
Open Cursor Pointer
Fetch
Close
Attribut
%isopen
%notfound
%found
%rowcount
35 Etats de curseur
Attribut Signification
Declare
--cursor v_cur is select CID from utilisateur
cursor v_cur is select c_id from commande where prix<15000;
v_com_id commande.c_id%type;
Begin
open v_cur;
loop
fetch v_cur into v_com_id;
exit when v_cur%notfound;
dbms_output.put_line('L’utilsateur avec ID='|| v_com_id||' a effctué des achats
<15000 DA');
end loop;
close v_cur;
End;
set serveroutput on;
Declare
cursor v_cur is select c_id from commande where prix<15000;
v_com_id commande.c_id%type;
Begin
open v_cur;
loop
fetch v_cur into v_com_id;
exit when v_cur%notfound;
dbms_output.put_line('L’utilsateur avec ID='|| v_com_id||' a effctué des achats
<15000 DA');
end loop;
close v_cur;
End;
set serveroutput on;
Declare
--cursor v_cur is select nom from utilisateur
cursor v_cur is select * from commande where prix<15000;
v_com_ligne v_cur%rowtype;
Begin
open v_cur;
loop
fetch v_cur into v_com_ligne;
exit when v_cur%notfound;
dbms_output.put_line('L’utilisateur avec ID='|| v_com_ligne.c_id||' a effctué
des achats = '||v_com_ligne.prix);
end loop;
close v_cur;
End;
39 Cursor declaration
CURSOR <Cursor_Name> CURSOR <Cursor_Name>(<Parameter_List>)
IS IS
<Select_Statement> <Select_Statement>
Declare
Cursor U_Cur Is declare
Select U.U_ID Cursor U_Cur(var_id Number
,U.Prenom
,U.NOM ,var_nom varchar)
From Utilisateur U; Is
Select U.U_ID
,U.NOM
,U.Prenom
,U.Ville
From utilisateur U
Where (U.U_ID = var_id Or U.U_ID Is Null)
And (U.NOM = var_nom Or U.Nom Is Null);
40 Etats de curseur
Begin
End;
45 Declaration procedure (with parameters)
Execute Nom_proc
Exec Nom_proc
Begin
Nom_proc
End;
Définition
Les triggers sont des procédures stockées qui s’exécutent automatiquement quant un
événement se produit. En général cet événement représente une opération DML (Data
Manipulation Language ) sur une table. Les instructions DML doivent inclure INSERT,
UPDATE ou DELETE Ils permettent entre autre de contrôler les accès à la base de
données.
49 Triggers
Triggers
De
De table
ligne(Row)
Pour chaque
1 fois
Ligne
53 Triggers
Si l'option FOR EACH ROW est spécifiée, c'est un trigger ligne, sinon c'est un trigger de
table.
Doit être unique dans un même schéma, peut être le nom d'un autre objet (table, vue,
procédure) mais à éviter.
DECLARE
............ <<<<déclarations>>>>
BEGIN
............
END;
54 Before & After
BEGIN
DBMS_OUTPUT.PUT_LINE(’ Avant la mise à jour de quelque commande’);
END;
Le trigger n'est déclenché sur une ligne que si l'expression WHEN est vérifiée pour cette
ligne.
58 Les noms de corrélation (OLD/New)
de triggers lignes, il est possible d’avoir accès à la valeur ancienne et la valeur nouvelle
grâce aux mots clés OLD et NEW
Il n’est pas possible d’avoir accès à ces valeurs dans les triggers de table.