SlideShare une entreprise Scribd logo
PL/SQL
M.M.Gammoudi
Professeur
ISAMM Manouba
E-mail: mohamed.gammoudi@fst.rnu.tn
Avantages du PL/SQL
Portabilité
Déclaration des variables
Programmer avec des structures de
contrôle des langages procéduraux
(traitement conditionnel, traitement
répétitif, …)
Gestion des erreurs.
Declarer des variables
Structure d’un bloc
PL/SQL
DECLARE -Optionnel
–Variables, curseurs, exceptions définies par l’utilisateur.
• BEGIN -Obligatoire
–Insructions SQL
–Instuctions PL/SQL
•EXCEPTION -Optionnel
–Actions à réaliser lorsqu’une erreur se produit
•END; -Obligatoire
Structure d’un bloc
PL/SQL
DECLARE
v_variable VARCHAR2(5);
BEGIN
SELECT nom_colonne
INTO v_variable
FROM nom_table;
•EXCEPTION -Optionnel
WHEN nom_exception THEN
…
•END;
Utilisation des Variables
On utilise les variables pour :
Le stockage temporaire de données
La manipulation de valeurs stockées
La possibilité de réutilisation
Une maintenance plus facile
Déclarer des Variables
PL/SQL
Syntaxe
Exemples
Identifiant [CONSTANT] datatype [NOT NULL]
[:= | DEFAULT expr];
Declare
v_hiredate DATE;
v_deptno NUMBER(2) NOT NULL:=10;
v_location VARCHAR2(13) := ‘Atlanta’;
c_comm CONSTANT NUMBER:=1400:
Déclarer des Variables
PL/SQL
Règles à suivre
Suivre des conventions de dénomination
Initialiser des variables définies avec la
contrainte NOT NULL
Initialisation à l’aide de l’opérateur
d’affectation (:=) ou du mot réservé
DEFAULT
Déclarer un seul identifiant par ligne.
Types de données
Scalaires
VARCHAR2 (maximum_length)
NUMBER
DATE
CHAR [(maximum_length)]
LONG
BOOLEAN
BINARY_INTEGER
Déclaration des Variables
Scalaires
Exemples
v_job VARCHAR2(9);
v_count BINARY_INTEGER := 0;
v_total_sal NUMBER(9,2) :=0;
V_orderdate DATE := SYSDATE +7;
C_tax_rate CONSTANT NUMBER(3,2) := 8.25;
V_valid BOOLEAN NOT NULL := TRUE;
L’Attribut %TYPE
Déclarer une variable à partir de :
 La définition d’une colonne de la base de
données
 La définition d’une variable précédemment
déclarée
Préfixer %TYPE avec :
 La table et la colonne de la base
 Le nom de la variable précédemment
déclarée
Déclarer des Variables
avec l’Attribut %TYPE
Exemples
…
v_name emp.ename%TYPE;
v_balance NUMBER(7,2);
v_min_balance v_balance%TYPE := 10;
…
Référencer des Variables
non-PL/SQL
Stocker le salaire mensuel dans une
variable hôte SQL*Plus
Référencer les variables non-PL/SQL
en tant que variables hôtes.
Préfixer les références de deux points
(:).
:g_monthly_sal := v_sal / 12;
VARIABLE g_monthly_sal NUMBER;
ACCEPT p_annual_sal PROMPT ‘Entrer le salaire annuel : ‘
DECLARE
v_sal NUMBER(9,2) := &p_annual_sal;
BEGIN
:g_monthly_sal := v_sal / 12;
END;
/
PRINT g_monthly_sal
Exemple: calculer le salaire mensuel, basé sur le
salaire annuel fourni par l’utilisateur.
Opérateurs en PL/SQL
Logiques
Arithmétiques
Concaténation
Identiques à
Parenthèses pour ceux de
SQL contrôler l’ordre des
opérations
Opérateur exponentiel (**)
Opérateurs en PL/SQL
Incrementer l’index pour une boucle.
Définir la valeur d’un indicateur
booléen.
Valider le numéro d’un employé s’il
contient une valeur
V_count := v_count + 1;
V_equal := (v_n1 = v_n2);
V_valid := (v_empno IS NOT NULL);
Instructions SQL en
PL/SQL
Extraire une ligne de la base de données
grâce à la commande SELECT.Un seul jeu
de valeurs peut être retourné.
Modifier des lignes dans la base en utilisant
des commandes LMD.
Contrôler une transaction avec les
commandes COMMIT, ROLLBACK
Déterminer l’issue d’une commande LMD
avec des curseurs implicites.
Instructions SELECT en
PL/SQL
Extraire une ligne de la base de données
avec select
Syntaxe
SELECT select_list
INTO { variable_name [, variable_name] …
| record_name}
FROM table
WHERE condition;
Instructions SELECT en
PL/SQL
La clause INTO est obligatoire
Exemple
DECLARE
v_deptno NUMBER(2);
v_loc VARCHAR2(15);
BEGIN
SELECT deptno, loc
INTO v_deptno, v_loc
FROM dept
WHERE dname = ‘SALES’;
…
END;
Extraire des données en
PL/SQL
Extraire la date de commande et la date
d’expédition pour la commande spécifiée.
DECLARE
v_orderdate ord.orderdate%TYPE;
v_shipdate ord.shipdate%TYPE;
BEGIN
SELECT orderdate, shipdate
INTO v_orderdate v_shipdate
FROM ord
WHERE id = 620;
…
END;
Extraire des données en
PL/SQL
Retourner la somme des salaires de
tous les employés du service spécifié.
DECLARE
v_sum_sal emp.sal%TYPE;
v_deptno NUMBER NOT NULL := 10;
BEGIN
SELECT SUM(SAL) -- group function
INTO v_sum_sal
FROM emp
WHERE deptno = v_deptno;
…
END;
Manipuler des données en
PL/SQL
Modifier le contenu des tables de la
base de données à l’aide des
commandes LMD suivantes:
INSERT
UPDATE
DELETE
Insérer des données
Ajouter les informations concernant un
nouvel employé à la table emp.
Exemple
BEGIN
INSERT INTO emp(empno, ename, job, deptno)
VALUES (50,’HARDING’, ‘CLERK’, 10);
End;
Mettre à jour des
données
Augmenter le salaire de tous les
employés de la table emp dont la
fonction est analyste.
Exemple
DECLARE
v_sal_increase emp.sal%TYPE := 2000;
BEGIN
UPDATE emp
SET sal = sal + v_sal_increase
WHERE job = ‘ANALYST’;
END;
Supprimer des données
Supprimer les enregistrements dont le
département est le 10 dans la table
emp.
Exemple
DECLARE
v_deptno emp.deptno%TYPE := 10;
BEGIN
DELETE FROM emp
WHERE deptno = v_ deptno;
END;
Instructions
COMMIT et ROLLBACK
Une transaction est initialisée par la
première commande LMD, et doit être
suivi d’un COMMIT ou d’un
ROLLBACK.
Utilisez les instructions SQL COMMIT
ou ROLLBACK pour terminer de façon
explicite une transaction.
Structures de Contrôle
Le processus
d’exécution PL/SQL
Vous pouvez modifier l’enchaînement
logique des instructions en utilisant des
instructions conditionnelles IF ou des
structures de boucles.
Instructions conditionnelles IF:
IF-THEN-END-IF
IF-THEN-ELSE-END-IF
IF-THEN-ELSIF-END-IF
Instructions IF
Syntaxe
Instruction IF simple:
Si le nom de l’employé est Osborne, lui associer le numéro
de manager 22.
IF condition THEN instructions;
[ELSIF condition THEN instructions;]
[ELSE instructions;]
END IF;
IF v_ename = ‘OSBORNE’ THEN
v_mgr := 22;
END IF;
Contrôles Itératifs:
instructions LOOP
Les boucles permettent de réaliser
plusieurs fois une instruction ou une
séquence d’instructions.
Il y a trois types de boucles :
 La boucle Basique
 La boucle FOR
 La boucle WHILE
Boucles Basiques
Syntaxe
LOOP
instruction1;
. . .
EXIT [WHEN condition];
END LOOP;
Où : condition est une variable booléenne ou une expression
Boucles Basiques
Exemple
DECLARE
v_ordid item.ordid.%TYPE := 601;
v_counter NUMBER(2) := 1;
BEGIN
LOOP
INSERT INTO item(ordid, itemid)
VALUES (v_ordid, v_counter);
v_counter := v_counter + 1;
EXIT WHEN v_counter > 10;
END LOOP;
END;
Boucles FOR
Syntaxe
Le compteur est déclaré implicitement
FOR counter in [REVERSE]
borne_inférieure..borne_supérieure LOOP
instruction1;
instruction2;
. . .
END LOOP;
Boucles WHILE
Syntaxe
WHILE condition LOOP
instruction1;
instruction2;
. . .
END LOOP;
Travailler avec des
types de données
Composés
PL/SQL Records
Ils sont composés d’un ou plusieurs
champs de types: scalaire, RECORD
Ils traitent un ensemble de Champs
comme une unité logique.
Ils sont pratiques pour extraire et
manipuler une ligne d’une table de la
base.
Créer un Record PL/SQL
Syntaxe
Où field_declaration est
TYPE type_nom IS RECORD
(field_declaration [, field_declaration]…);
Identifier type_name;
Field_name {field_type | variable%TYPE
| table.column%TYPE | table%ROWTYPE}
[[NOT NULL] {:= | DEFAULT} expr]
Créer un Record PL/SQL
Exemple
…
TYPE emp_record_type IS RECORD
(ename VARCHAR2(10) ,
job VARCHAR2(9),
sal NUMBER(7,2));
emp_record emp_record_type;
…
L’attribut %ROWTYPE
Il permet de définir une variable à partir d’un
ensemble de colonnes d’une table ou d’une
vue de la base de données.
Préfixer %ROWTYPE par le nom de la table
ou de la vue.
Les champs du Record prennent les Noms et
les Types des colonnes de la table ou de la
vue.
DECLARE
emp_record emp%ROWTYPE;
Écrire des curseurs
Explicites
A propos des Curseurs
Chaque instruction SQL exécutée a son
propre curseur individuel qui lui est
associé :
Curseurs implicites : déclarés pour
toutes les instructions LMD et SELECT
PL/SQL
Curseurs explicites : déclarés et
nommés par le programmeur.
Fonctionnement des
curseurs Explicites
7369 SMITH CLERK
7566 JONES MANAGER
7788 SCOTT ANALYST
7876 ADAMS CLERK
7902 FORD ANALYST
Curseur
Ensemble actif de lignes
(Active Set)
Ligne
courante
Contrôler les Curseurs
Explicites
DECLARE OPEN FETCH CLOSE
oui
non
Créer une Identifier Charger la -Tester Libérer
zone SQL l’ensmble ligne courante l’existence l’ ensemble
nommée actif de dans les de lignes actif
lignes variables - si OUI,
Retourner à FETCH
Ouvrir un Curseur
Syntaxe
Ouvrir le curseur pour exécuter la requête et
identifier l’Ensemble de lignes actif.
Si la requête ne retourne pas de lignes,
aucune exception n’est signalée.
Utilisez les attributs du curseur pour tester le
résultat après affectation.
OPEN cursor_name;
Ramener les données à
partir du Curseur
Syntaxe
Chargez les valeurs de la ligne courante dans
des variables de sortie.
Prévoir le même nombre de variables.
Ajuster la position des variables par rapport
aux colonnes.
Tester si le curseur contient des lignes.
FETCH cursor_name INTO [variable1, variable2, …]
| record_name];
Ramener les données à
partir du Curseur
Exemple: ramener les 10 premiers employés
DECLARE
v_empno emp.empno%TYPE;
v_ename emp.ename%TYPE;
CURSOR emp_cursor IS
SELECT empno,ename
FROM emp;
BEGIN
OPEN emp_cursor;
FOR i IN 1..10 LOOP
FETCH emp_cursor INTO v_empno, v_ename;
…
END LOOP;
END;
Fermer un Curseur
Syntaxe
Fermer le curseur après avoir terminé le
traitement des lignes.
N’essayer pas de ramener les données
d’un curseur s’il a été fermé.
CLOSE cursor_name;
Attributs d’un curseur SQL
Grâce aux attributs d’un curseur SQL, vous
pouvez tester l’issue de vos instructions SQL.
SQL%ROWCOUNT Nombre d’enregistrements traités
par la dernière instruction SQL
(une valeur entière)
SQL%FOUND Attribut booléen qui vaut TRUE si
la dernière instruction SQL a
traité un ou plusieurs
enregistrements
SQL%NOTFOUND Attribut booléen qui vaut TRUE si
la dernière instruction SQL n’ a
traité aucun enregistrements
SQL%ISOPEN Vaut toujours FALSE car PL/SQL
ferme les curseurs implicites
immédiatement après leur
exécution
Attributs d’un curseur
SQL
Exemple : ramener les 10 premiers employés
DECLARE
v_empno emp.empno%TYPE;
v_ename emp.ename%TYPE;
CURSOR emp_cursor IS
SELECT empno,ename
FROM emp;
BEGIN
OPEN emp_cursor;
FOR i IN 1..10 LOOP
FETCH emp_cursor INTO v_empno, v_ename;
EXIT WHEN emp_cursor%ROWCOUNT > 10
OR emp_cursor%NOTFOUND;
…
END LOOP;
CLOSE emp_cursor;
END;
Curseurs et Records
Traiter les lignes de l’ensemble actif en
ramenant les valeurs dans un RECORD
PL/SQL
DECLARE
CURSOR emp_cursor IS
SELECT empno,ename
FROM emp;
emp_recored emp_cursor%ROWTYPE;
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor INTO emp_record;
…
END LOOP.
END;
Curseur dans une boucle
FOR
Syntaxe
Simplification d’écriture pour les curseurs
implicites.
Ouverture, fetch et fermeture implicite du
curseur.
Le record est déclaré implicitement.
FOR record_name IN cursor_name LOOP
statement1;
statement2;
. . .
END LOOP;
Curseur dans une boucle
FOR
Exemple : ramener tous employés un à
un
DECLARE
CURSOR emp_cursor IS
SELECT empno,ename
FROM emp;
BEGIN
FOR emp_record IN emp_cursor LOOP
IF ………. …
…..
END LOOP;
END;

Contenu connexe

Tendances

Cours c#
Cours c#Cours c#
Cours c#
zan
 
Cours d'introduction aux HTML5 & CSS3
Cours d'introduction aux HTML5 & CSS3Cours d'introduction aux HTML5 & CSS3
Cours d'introduction aux HTML5 & CSS3
Abel LIFAEFI MBULA
 
Cours Génie Logiciel - Cours 2 - Cycles de vie
Cours Génie Logiciel - Cours 2 - Cycles de vieCours Génie Logiciel - Cours 2 - Cycles de vie
Cours Génie Logiciel - Cours 2 - Cycles de vie
Mohammed Amine Mostefai
 
Programmation en C
Programmation en CProgrammation en C
Programmation en C
Youness Boukouchi
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-Correction
Lilia Sfaxi
 
Chapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en CChapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en C
Abdelouahed Abdou
 
Exam 15.02.2022.pdf
Exam 15.02.2022.pdfExam 15.02.2022.pdf
Exam 15.02.2022.pdf
GhazaliLoubna
 
Le langage plsql
Le langage plsqlLe langage plsql
Le langage plsql
kati_f87
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateurs
Aziz Darouichi
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
Aziz Darouichi
 
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Mansouri Khalifa
 
Mini projet individuel php
Mini projet individuel phpMini projet individuel php
Mini projet individuel php
Khadim Mbacké
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exception
ECAM Brussels Engineering School
 
Correction de td poo n2
Correction de td poo n2Correction de td poo n2
Correction de td poo n2
yassine kchiri
 
Uml examen
Uml  examenUml  examen
Uml examen
Majid CHADAD
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-Correction
Lilia Sfaxi
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfaces
Amir Souissi
 
Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++
Amina HAMEURLAINE
 
Chapitre 5 arbres binaires
Chapitre 5 arbres binairesChapitre 5 arbres binaires
Chapitre 5 arbres binaires
Sana Aroussi
 

Tendances (20)

Cours c#
Cours c#Cours c#
Cours c#
 
Cours d'introduction aux HTML5 & CSS3
Cours d'introduction aux HTML5 & CSS3Cours d'introduction aux HTML5 & CSS3
Cours d'introduction aux HTML5 & CSS3
 
Cours Génie Logiciel - Cours 2 - Cycles de vie
Cours Génie Logiciel - Cours 2 - Cycles de vieCours Génie Logiciel - Cours 2 - Cycles de vie
Cours Génie Logiciel - Cours 2 - Cycles de vie
 
Programmation en C
Programmation en CProgrammation en C
Programmation en C
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-Correction
 
Chapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en CChapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en C
 
Exam 15.02.2022.pdf
Exam 15.02.2022.pdfExam 15.02.2022.pdf
Exam 15.02.2022.pdf
 
Plsql
PlsqlPlsql
Plsql
 
Le langage plsql
Le langage plsqlLe langage plsql
Le langage plsql
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateurs
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
 
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
 
Mini projet individuel php
Mini projet individuel phpMini projet individuel php
Mini projet individuel php
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exception
 
Correction de td poo n2
Correction de td poo n2Correction de td poo n2
Correction de td poo n2
 
Uml examen
Uml  examenUml  examen
Uml examen
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-Correction
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfaces
 
Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++
 
Chapitre 5 arbres binaires
Chapitre 5 arbres binairesChapitre 5 arbres binaires
Chapitre 5 arbres binaires
 

En vedette

Power point ingles 3_carlosruiz
Power point ingles 3_carlosruizPower point ingles 3_carlosruiz
Power point ingles 3_carlosruiz
carlosalbertoruizgarcia
 
Perniagaan dan Keusahawanan
Perniagaan dan KeusahawananPerniagaan dan Keusahawanan
Perniagaan dan Keusahawanan
Muhammad Zharfan
 
蘆獅授證31週年慶流程簡報103.06.05
蘆獅授證31週年慶流程簡報103.06.05蘆獅授證31週年慶流程簡報103.06.05
蘆獅授證31週年慶流程簡報103.06.05
5elephant
 
хамаарал ба функц
хамаарал ба функцхамаарал ба функц
хамаарал ба функц
Guljan Bolashah
 
Hydraulic Fracturing: Opportunities and Obstacles By Trigg Ruehle
Hydraulic Fracturing: Opportunities and Obstacles By Trigg Ruehle Hydraulic Fracturing: Opportunities and Obstacles By Trigg Ruehle
Hydraulic Fracturing: Opportunities and Obstacles By Trigg Ruehle
Trigg Ruehle
 
Het paleis: een voorbeeld van frontaalperspectief
Het paleis: een voorbeeld van frontaalperspectiefHet paleis: een voorbeeld van frontaalperspectief
Het paleis: een voorbeeld van frontaalperspectief
René Domburg
 
fixcall Solusi Nelpon MURAH *24 jam NON STOP ke BEDA OPERATOR GSM
fixcall Solusi Nelpon MURAH *24 jam NON STOP ke BEDA OPERATOR GSM fixcall Solusi Nelpon MURAH *24 jam NON STOP ke BEDA OPERATOR GSM
fixcall Solusi Nelpon MURAH *24 jam NON STOP ke BEDA OPERATOR GSM
Aby
 
Turkey heritage
Turkey heritageTurkey heritage
Turkey heritage
mhartavi
 
E home簡報資料
E home簡報資料E home簡報資料
E home簡報資料
5elephant
 
Plsql triggers
Plsql triggersPlsql triggers
Plsql triggers
Az Za
 
Democracy
DemocracyDemocracy
Solar Thermal Energy By Trigg Ruehle
Solar Thermal Energy By Trigg Ruehle Solar Thermal Energy By Trigg Ruehle
Solar Thermal Energy By Trigg Ruehle
Trigg Ruehle
 

En vedette (14)

Power point ingles 3_carlosruiz
Power point ingles 3_carlosruizPower point ingles 3_carlosruiz
Power point ingles 3_carlosruiz
 
Portfolio
PortfolioPortfolio
Portfolio
 
Perniagaan dan Keusahawanan
Perniagaan dan KeusahawananPerniagaan dan Keusahawanan
Perniagaan dan Keusahawanan
 
蘆獅授證31週年慶流程簡報103.06.05
蘆獅授證31週年慶流程簡報103.06.05蘆獅授證31週年慶流程簡報103.06.05
蘆獅授證31週年慶流程簡報103.06.05
 
хамаарал ба функц
хамаарал ба функцхамаарал ба функц
хамаарал ба функц
 
Het paleis
Het paleisHet paleis
Het paleis
 
Hydraulic Fracturing: Opportunities and Obstacles By Trigg Ruehle
Hydraulic Fracturing: Opportunities and Obstacles By Trigg Ruehle Hydraulic Fracturing: Opportunities and Obstacles By Trigg Ruehle
Hydraulic Fracturing: Opportunities and Obstacles By Trigg Ruehle
 
Het paleis: een voorbeeld van frontaalperspectief
Het paleis: een voorbeeld van frontaalperspectiefHet paleis: een voorbeeld van frontaalperspectief
Het paleis: een voorbeeld van frontaalperspectief
 
fixcall Solusi Nelpon MURAH *24 jam NON STOP ke BEDA OPERATOR GSM
fixcall Solusi Nelpon MURAH *24 jam NON STOP ke BEDA OPERATOR GSM fixcall Solusi Nelpon MURAH *24 jam NON STOP ke BEDA OPERATOR GSM
fixcall Solusi Nelpon MURAH *24 jam NON STOP ke BEDA OPERATOR GSM
 
Turkey heritage
Turkey heritageTurkey heritage
Turkey heritage
 
E home簡報資料
E home簡報資料E home簡報資料
E home簡報資料
 
Plsql triggers
Plsql triggersPlsql triggers
Plsql triggers
 
Democracy
DemocracyDemocracy
Democracy
 
Solar Thermal Energy By Trigg Ruehle
Solar Thermal Energy By Trigg Ruehle Solar Thermal Energy By Trigg Ruehle
Solar Thermal Energy By Trigg Ruehle
 

Similaire à Plsql

Les03.ppt
Les03.pptLes03.ppt
Les03.ppt
zidane39
 
Les04.ppt
Les04.pptLes04.ppt
Les04.ppt
zidane39
 
1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdf1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdf
ImaneZoubir1
 
Les06.ppt
Les06.pptLes06.ppt
Les06.ppt
zidane39
 
1444475541443.pptx
1444475541443.pptx1444475541443.pptx
1444475541443.pptx
tirike6016
 
oracle : le PL-SQL
oracle : le PL-SQLoracle : le PL-SQL
oracle : le PL-SQL
Mohammed Jaafar
 
PLSQL-Complements-4p.pdf
PLSQL-Complements-4p.pdfPLSQL-Complements-4p.pdf
PLSQL-Complements-4p.pdf
RihabBENLAMINE
 
PL/Sql et Sécurité des bases de données
PL/Sql et Sécurité des bases de donnéesPL/Sql et Sécurité des bases de données
PL/Sql et Sécurité des bases de données
smiste
 
01 l'ordre select élémentaire
01 l'ordre select élémentaire 01 l'ordre select élémentaire
01 l'ordre select élémentaire
ENSAM Casablanca
 
ORACLE 12C PLSQL Gestion des Triggers.ppt
ORACLE 12C PLSQL Gestion des Triggers.pptORACLE 12C PLSQL Gestion des Triggers.ppt
ORACLE 12C PLSQL Gestion des Triggers.ppt
AhmathBambaMBACKE
 
Sqloracle
SqloracleSqloracle
Sqloracle
tedy11
 
Les bases de la programmation en JAVA
Les bases de la programmation  en JAVA   Les bases de la programmation  en JAVA
Les bases de la programmation en JAVA
Asmaa BENGUEDDACH
 
BDA-PL-SQL.pdf11111111111111111111111111
BDA-PL-SQL.pdf11111111111111111111111111BDA-PL-SQL.pdf11111111111111111111111111
BDA-PL-SQL.pdf11111111111111111111111111
SaraMeriem1
 
Les01.ppt
Les01.pptLes01.ppt
Les01.ppt
zidane39
 
2_8_Cours_Plsql.ppt
2_8_Cours_Plsql.ppt2_8_Cours_Plsql.ppt
2_8_Cours_Plsql.ppt
RihabBENLAMINE
 
SQL.pdf
SQL.pdfSQL.pdf
C# 7 - Nouveautés
C# 7 - NouveautésC# 7 - Nouveautés
C# 7 - Nouveautés
James RAVAILLE
 
Eléments du langage Java.pdf
Eléments du langage  Java.pdfEléments du langage  Java.pdf
Eléments du langage Java.pdf
AabidiHafid
 
12770637lmkml,,kml,mk,mk,kmk,mk,m,m,m.ppt
12770637lmkml,,kml,mk,mk,kmk,mk,m,m,m.ppt12770637lmkml,,kml,mk,mk,kmk,mk,m,m,m.ppt
12770637lmkml,,kml,mk,mk,kmk,mk,m,m,m.ppt
SYS23
 
Les02.ppt
Les02.pptLes02.ppt
Les02.ppt
zidane39
 

Similaire à Plsql (20)

Les03.ppt
Les03.pptLes03.ppt
Les03.ppt
 
Les04.ppt
Les04.pptLes04.ppt
Les04.ppt
 
1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdf1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdf
 
Les06.ppt
Les06.pptLes06.ppt
Les06.ppt
 
1444475541443.pptx
1444475541443.pptx1444475541443.pptx
1444475541443.pptx
 
oracle : le PL-SQL
oracle : le PL-SQLoracle : le PL-SQL
oracle : le PL-SQL
 
PLSQL-Complements-4p.pdf
PLSQL-Complements-4p.pdfPLSQL-Complements-4p.pdf
PLSQL-Complements-4p.pdf
 
PL/Sql et Sécurité des bases de données
PL/Sql et Sécurité des bases de donnéesPL/Sql et Sécurité des bases de données
PL/Sql et Sécurité des bases de données
 
01 l'ordre select élémentaire
01 l'ordre select élémentaire 01 l'ordre select élémentaire
01 l'ordre select élémentaire
 
ORACLE 12C PLSQL Gestion des Triggers.ppt
ORACLE 12C PLSQL Gestion des Triggers.pptORACLE 12C PLSQL Gestion des Triggers.ppt
ORACLE 12C PLSQL Gestion des Triggers.ppt
 
Sqloracle
SqloracleSqloracle
Sqloracle
 
Les bases de la programmation en JAVA
Les bases de la programmation  en JAVA   Les bases de la programmation  en JAVA
Les bases de la programmation en JAVA
 
BDA-PL-SQL.pdf11111111111111111111111111
BDA-PL-SQL.pdf11111111111111111111111111BDA-PL-SQL.pdf11111111111111111111111111
BDA-PL-SQL.pdf11111111111111111111111111
 
Les01.ppt
Les01.pptLes01.ppt
Les01.ppt
 
2_8_Cours_Plsql.ppt
2_8_Cours_Plsql.ppt2_8_Cours_Plsql.ppt
2_8_Cours_Plsql.ppt
 
SQL.pdf
SQL.pdfSQL.pdf
SQL.pdf
 
C# 7 - Nouveautés
C# 7 - NouveautésC# 7 - Nouveautés
C# 7 - Nouveautés
 
Eléments du langage Java.pdf
Eléments du langage  Java.pdfEléments du langage  Java.pdf
Eléments du langage Java.pdf
 
12770637lmkml,,kml,mk,mk,kmk,mk,m,m,m.ppt
12770637lmkml,,kml,mk,mk,kmk,mk,m,m,m.ppt12770637lmkml,,kml,mk,mk,kmk,mk,m,m,m.ppt
12770637lmkml,,kml,mk,mk,kmk,mk,m,m,m.ppt
 
Les02.ppt
Les02.pptLes02.ppt
Les02.ppt
 

Plsql

  • 2. Avantages du PL/SQL Portabilité Déclaration des variables Programmer avec des structures de contrôle des langages procéduraux (traitement conditionnel, traitement répétitif, …) Gestion des erreurs.
  • 4. Structure d’un bloc PL/SQL DECLARE -Optionnel –Variables, curseurs, exceptions définies par l’utilisateur. • BEGIN -Obligatoire –Insructions SQL –Instuctions PL/SQL •EXCEPTION -Optionnel –Actions à réaliser lorsqu’une erreur se produit •END; -Obligatoire
  • 5. Structure d’un bloc PL/SQL DECLARE v_variable VARCHAR2(5); BEGIN SELECT nom_colonne INTO v_variable FROM nom_table; •EXCEPTION -Optionnel WHEN nom_exception THEN … •END;
  • 6. Utilisation des Variables On utilise les variables pour : Le stockage temporaire de données La manipulation de valeurs stockées La possibilité de réutilisation Une maintenance plus facile
  • 7. Déclarer des Variables PL/SQL Syntaxe Exemples Identifiant [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr]; Declare v_hiredate DATE; v_deptno NUMBER(2) NOT NULL:=10; v_location VARCHAR2(13) := ‘Atlanta’; c_comm CONSTANT NUMBER:=1400:
  • 8. Déclarer des Variables PL/SQL Règles à suivre Suivre des conventions de dénomination Initialiser des variables définies avec la contrainte NOT NULL Initialisation à l’aide de l’opérateur d’affectation (:=) ou du mot réservé DEFAULT Déclarer un seul identifiant par ligne.
  • 9. Types de données Scalaires VARCHAR2 (maximum_length) NUMBER DATE CHAR [(maximum_length)] LONG BOOLEAN BINARY_INTEGER
  • 10. Déclaration des Variables Scalaires Exemples v_job VARCHAR2(9); v_count BINARY_INTEGER := 0; v_total_sal NUMBER(9,2) :=0; V_orderdate DATE := SYSDATE +7; C_tax_rate CONSTANT NUMBER(3,2) := 8.25; V_valid BOOLEAN NOT NULL := TRUE;
  • 11. L’Attribut %TYPE Déclarer une variable à partir de :  La définition d’une colonne de la base de données  La définition d’une variable précédemment déclarée Préfixer %TYPE avec :  La table et la colonne de la base  Le nom de la variable précédemment déclarée
  • 12. Déclarer des Variables avec l’Attribut %TYPE Exemples … v_name emp.ename%TYPE; v_balance NUMBER(7,2); v_min_balance v_balance%TYPE := 10; …
  • 13. Référencer des Variables non-PL/SQL Stocker le salaire mensuel dans une variable hôte SQL*Plus Référencer les variables non-PL/SQL en tant que variables hôtes. Préfixer les références de deux points (:). :g_monthly_sal := v_sal / 12;
  • 14. VARIABLE g_monthly_sal NUMBER; ACCEPT p_annual_sal PROMPT ‘Entrer le salaire annuel : ‘ DECLARE v_sal NUMBER(9,2) := &p_annual_sal; BEGIN :g_monthly_sal := v_sal / 12; END; / PRINT g_monthly_sal Exemple: calculer le salaire mensuel, basé sur le salaire annuel fourni par l’utilisateur.
  • 15. Opérateurs en PL/SQL Logiques Arithmétiques Concaténation Identiques à Parenthèses pour ceux de SQL contrôler l’ordre des opérations Opérateur exponentiel (**)
  • 16. Opérateurs en PL/SQL Incrementer l’index pour une boucle. Définir la valeur d’un indicateur booléen. Valider le numéro d’un employé s’il contient une valeur V_count := v_count + 1; V_equal := (v_n1 = v_n2); V_valid := (v_empno IS NOT NULL);
  • 17. Instructions SQL en PL/SQL Extraire une ligne de la base de données grâce à la commande SELECT.Un seul jeu de valeurs peut être retourné. Modifier des lignes dans la base en utilisant des commandes LMD. Contrôler une transaction avec les commandes COMMIT, ROLLBACK Déterminer l’issue d’une commande LMD avec des curseurs implicites.
  • 18. Instructions SELECT en PL/SQL Extraire une ligne de la base de données avec select Syntaxe SELECT select_list INTO { variable_name [, variable_name] … | record_name} FROM table WHERE condition;
  • 19. Instructions SELECT en PL/SQL La clause INTO est obligatoire Exemple DECLARE v_deptno NUMBER(2); v_loc VARCHAR2(15); BEGIN SELECT deptno, loc INTO v_deptno, v_loc FROM dept WHERE dname = ‘SALES’; … END;
  • 20. Extraire des données en PL/SQL Extraire la date de commande et la date d’expédition pour la commande spécifiée. DECLARE v_orderdate ord.orderdate%TYPE; v_shipdate ord.shipdate%TYPE; BEGIN SELECT orderdate, shipdate INTO v_orderdate v_shipdate FROM ord WHERE id = 620; … END;
  • 21. Extraire des données en PL/SQL Retourner la somme des salaires de tous les employés du service spécifié. DECLARE v_sum_sal emp.sal%TYPE; v_deptno NUMBER NOT NULL := 10; BEGIN SELECT SUM(SAL) -- group function INTO v_sum_sal FROM emp WHERE deptno = v_deptno; … END;
  • 22. Manipuler des données en PL/SQL Modifier le contenu des tables de la base de données à l’aide des commandes LMD suivantes: INSERT UPDATE DELETE
  • 23. Insérer des données Ajouter les informations concernant un nouvel employé à la table emp. Exemple BEGIN INSERT INTO emp(empno, ename, job, deptno) VALUES (50,’HARDING’, ‘CLERK’, 10); End;
  • 24. Mettre à jour des données Augmenter le salaire de tous les employés de la table emp dont la fonction est analyste. Exemple DECLARE v_sal_increase emp.sal%TYPE := 2000; BEGIN UPDATE emp SET sal = sal + v_sal_increase WHERE job = ‘ANALYST’; END;
  • 25. Supprimer des données Supprimer les enregistrements dont le département est le 10 dans la table emp. Exemple DECLARE v_deptno emp.deptno%TYPE := 10; BEGIN DELETE FROM emp WHERE deptno = v_ deptno; END;
  • 26. Instructions COMMIT et ROLLBACK Une transaction est initialisée par la première commande LMD, et doit être suivi d’un COMMIT ou d’un ROLLBACK. Utilisez les instructions SQL COMMIT ou ROLLBACK pour terminer de façon explicite une transaction.
  • 28. Le processus d’exécution PL/SQL Vous pouvez modifier l’enchaînement logique des instructions en utilisant des instructions conditionnelles IF ou des structures de boucles. Instructions conditionnelles IF: IF-THEN-END-IF IF-THEN-ELSE-END-IF IF-THEN-ELSIF-END-IF
  • 29. Instructions IF Syntaxe Instruction IF simple: Si le nom de l’employé est Osborne, lui associer le numéro de manager 22. IF condition THEN instructions; [ELSIF condition THEN instructions;] [ELSE instructions;] END IF; IF v_ename = ‘OSBORNE’ THEN v_mgr := 22; END IF;
  • 30. Contrôles Itératifs: instructions LOOP Les boucles permettent de réaliser plusieurs fois une instruction ou une séquence d’instructions. Il y a trois types de boucles :  La boucle Basique  La boucle FOR  La boucle WHILE
  • 31. Boucles Basiques Syntaxe LOOP instruction1; . . . EXIT [WHEN condition]; END LOOP; Où : condition est une variable booléenne ou une expression
  • 32. Boucles Basiques Exemple DECLARE v_ordid item.ordid.%TYPE := 601; v_counter NUMBER(2) := 1; BEGIN LOOP INSERT INTO item(ordid, itemid) VALUES (v_ordid, v_counter); v_counter := v_counter + 1; EXIT WHEN v_counter > 10; END LOOP; END;
  • 33. Boucles FOR Syntaxe Le compteur est déclaré implicitement FOR counter in [REVERSE] borne_inférieure..borne_supérieure LOOP instruction1; instruction2; . . . END LOOP;
  • 34. Boucles WHILE Syntaxe WHILE condition LOOP instruction1; instruction2; . . . END LOOP;
  • 35. Travailler avec des types de données Composés
  • 36. PL/SQL Records Ils sont composés d’un ou plusieurs champs de types: scalaire, RECORD Ils traitent un ensemble de Champs comme une unité logique. Ils sont pratiques pour extraire et manipuler une ligne d’une table de la base.
  • 37. Créer un Record PL/SQL Syntaxe Où field_declaration est TYPE type_nom IS RECORD (field_declaration [, field_declaration]…); Identifier type_name; Field_name {field_type | variable%TYPE | table.column%TYPE | table%ROWTYPE} [[NOT NULL] {:= | DEFAULT} expr]
  • 38. Créer un Record PL/SQL Exemple … TYPE emp_record_type IS RECORD (ename VARCHAR2(10) , job VARCHAR2(9), sal NUMBER(7,2)); emp_record emp_record_type; …
  • 39. L’attribut %ROWTYPE Il permet de définir une variable à partir d’un ensemble de colonnes d’une table ou d’une vue de la base de données. Préfixer %ROWTYPE par le nom de la table ou de la vue. Les champs du Record prennent les Noms et les Types des colonnes de la table ou de la vue. DECLARE emp_record emp%ROWTYPE;
  • 41. A propos des Curseurs Chaque instruction SQL exécutée a son propre curseur individuel qui lui est associé : Curseurs implicites : déclarés pour toutes les instructions LMD et SELECT PL/SQL Curseurs explicites : déclarés et nommés par le programmeur.
  • 42. Fonctionnement des curseurs Explicites 7369 SMITH CLERK 7566 JONES MANAGER 7788 SCOTT ANALYST 7876 ADAMS CLERK 7902 FORD ANALYST Curseur Ensemble actif de lignes (Active Set) Ligne courante
  • 43. Contrôler les Curseurs Explicites DECLARE OPEN FETCH CLOSE oui non Créer une Identifier Charger la -Tester Libérer zone SQL l’ensmble ligne courante l’existence l’ ensemble nommée actif de dans les de lignes actif lignes variables - si OUI, Retourner à FETCH
  • 44. Ouvrir un Curseur Syntaxe Ouvrir le curseur pour exécuter la requête et identifier l’Ensemble de lignes actif. Si la requête ne retourne pas de lignes, aucune exception n’est signalée. Utilisez les attributs du curseur pour tester le résultat après affectation. OPEN cursor_name;
  • 45. Ramener les données à partir du Curseur Syntaxe Chargez les valeurs de la ligne courante dans des variables de sortie. Prévoir le même nombre de variables. Ajuster la position des variables par rapport aux colonnes. Tester si le curseur contient des lignes. FETCH cursor_name INTO [variable1, variable2, …] | record_name];
  • 46. Ramener les données à partir du Curseur Exemple: ramener les 10 premiers employés DECLARE v_empno emp.empno%TYPE; v_ename emp.ename%TYPE; CURSOR emp_cursor IS SELECT empno,ename FROM emp; BEGIN OPEN emp_cursor; FOR i IN 1..10 LOOP FETCH emp_cursor INTO v_empno, v_ename; … END LOOP; END;
  • 47. Fermer un Curseur Syntaxe Fermer le curseur après avoir terminé le traitement des lignes. N’essayer pas de ramener les données d’un curseur s’il a été fermé. CLOSE cursor_name;
  • 48. Attributs d’un curseur SQL Grâce aux attributs d’un curseur SQL, vous pouvez tester l’issue de vos instructions SQL. SQL%ROWCOUNT Nombre d’enregistrements traités par la dernière instruction SQL (une valeur entière) SQL%FOUND Attribut booléen qui vaut TRUE si la dernière instruction SQL a traité un ou plusieurs enregistrements SQL%NOTFOUND Attribut booléen qui vaut TRUE si la dernière instruction SQL n’ a traité aucun enregistrements SQL%ISOPEN Vaut toujours FALSE car PL/SQL ferme les curseurs implicites immédiatement après leur exécution
  • 49. Attributs d’un curseur SQL Exemple : ramener les 10 premiers employés DECLARE v_empno emp.empno%TYPE; v_ename emp.ename%TYPE; CURSOR emp_cursor IS SELECT empno,ename FROM emp; BEGIN OPEN emp_cursor; FOR i IN 1..10 LOOP FETCH emp_cursor INTO v_empno, v_ename; EXIT WHEN emp_cursor%ROWCOUNT > 10 OR emp_cursor%NOTFOUND; … END LOOP; CLOSE emp_cursor; END;
  • 50. Curseurs et Records Traiter les lignes de l’ensemble actif en ramenant les valeurs dans un RECORD PL/SQL DECLARE CURSOR emp_cursor IS SELECT empno,ename FROM emp; emp_recored emp_cursor%ROWTYPE; BEGIN OPEN emp_cursor; LOOP FETCH emp_cursor INTO emp_record; … END LOOP. END;
  • 51. Curseur dans une boucle FOR Syntaxe Simplification d’écriture pour les curseurs implicites. Ouverture, fetch et fermeture implicite du curseur. Le record est déclaré implicitement. FOR record_name IN cursor_name LOOP statement1; statement2; . . . END LOOP;
  • 52. Curseur dans une boucle FOR Exemple : ramener tous employés un à un DECLARE CURSOR emp_cursor IS SELECT empno,ename FROM emp; BEGIN FOR emp_record IN emp_cursor LOOP IF ………. … ….. END LOOP; END;