Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Cours1 PLSQL FSTG

Télécharger au format pptx, pdf ou txt
Télécharger au format pptx, pdf ou txt
Vous êtes sur la page 1sur 59

BASES DE DONNÉES AVANCÉES

Langage PL/Sql

1
INTRODUCTION
2
GÉNÉRALITÉS 3

 PL/SQL: Procedural Language extensions to SQL.

 Objectif : bonne intégration du langage avec SQL.

 PL/SQL n’existe pas comme un langage autonome ; il est utilisé


à l’intérieur d’autres produits Oracle.

 Permet des interactions avec une base SQL.

 Langage de programmation qui inclut des ordres SQL


3
POURQUOI PL/SQL 4

 SQL est un langage non procédural.

 Les traitements complexes sont parfois difficiles à écrire si on ne


peut utiliser des variables et les structures de programmation
comme les boucles et les alternatives.

 On ressent vite le besoin d’un langage procédural pour lier


plusieurs requêtes SQL avec des variables et dans les structures
de programmation habituelles.
4
POURQUOI PL/SQL (2) 5

 Les contraintes prédéfinies ne sont pas toujours suffisantes.


Exemple : tout nouveau prix pour un CD doit avoir une date de
début supérieure à celle des autres prix pour ce CD.

 L'insertion, la suppression ou la mise à jour de certaines données


peut nécessiter des calculs sur la base.

 Utilisation de fonction propres à l'application dans des requêtes.

5
UTILISATION DE PL/SQL
6

 PL/SQL peut être utilisé pour l’écriture des procédures stockées


et des triggers (Oracle accepte aussi le langage Java).

 Il convient aussi pour écrire des fonctions utilisateurs qui peuvent


être utilisées dans les requêtes SQL (en plus des fonctions
prédéfinies).

 Il est aussi utilisé dans des outils Oracle, Forms et Report en


particulier.

6
PL/SQL 7

 PL/SQL est un langage structuré en blocs, constitués d'un


ensemble d'instructions. C’est un langage de programmation à
la fois puissant, simple et moderne.

7
COMPARAISON AVEC SQL
8

 SQL:
 Langage assertionnel et non procédural.

 Pl/Sql:
 Langage procédural qui intègre des ordres sql
 Select, insert, update, delete

 Langage à part entière comprenant:


 Définition de variables, constantes, expressions, affectations.
 Traitement conditionnels, répétitifs.
 Traitement de curseurs.
 Traitement des erreurs et d’exceptions.
 Etc…

8
AVANTAGES DU PL/SQL
9

PL/SQL offre de nombreux avantages:

 Intégration parfaite du SQL


 Support de la programmation orientée objet

 Très bonne performance

 Portabilité

 Facilité de programmation

9
OBJECTIFS DU CHAPITRE
A la fin de ce chapitre, vous saurez:

 Identifierles différentes parties d’un bloc PL/SQL


 Spécifier des variables PL/SQL
 Déclarer des variables intégrées PL/SQL
 Déclarer des variables typées dynamiquement
 Exécuter un bloc PL/SQL
 Avec ou sans accès à la base

10
11

Structure d’un programme


PL/SQL

11
STRUCTURE D’UN PROGRAMME PL/SQL
 L'unité de base en PL / SQL s'appelle un bloc composé
de trois parties: une partie déclarative, une partie
exécutable et une partie de construction d'exception.

12
STRUCTURE D’UN PROGRAMME PL/SQL
 Partie déclaration: Cette section commence par le mot-
clé DECLARE. C'est une section facultative et définit
toutes les variables, curseurs, sous-programmes et autres
éléments à utiliser dans le programme.

 Commandes exécutables: Cette section est placée entre


les mots-clés BEGIN et END. Il s'agit d'une section
obligatoire. Il comprend les instructions PL / SQL
exécutables du programme. Il doit avoir au moins une
ligne de code exécutable, qui peut être juste une
commande NULL pour indiquer que rien ne doit être
exécuté. 13
STRUCTURE D’UN PROGRAMME PL/SQL
 Gestion des exceptions: Cette section commence par le
mot-clé EXCEPTION. Cette section est à nouveau
facultative et contient des exceptions qui traitent les
erreurs dans le programme.

 Chaque instruction PL / SQL se termine par un point-


virgule (;). Les blocs PL / SQL peuvent être imbriqués
dans d'autres blocs PL / SQL en utilisant BEGIN et 14
END.
STRUCTURE D’UN PROGRAMME PL/SQL
 En bloc anonyme, seule la partie exécutable du bloc est requise, les
autres parties ne sont pas indispensables. Vous trouverez ci-dessous
un exemple de code anonyme simple, qui ne fait rien d'autre que de
produire des rapports d'erreur.

15
STRUCTURE D’UN PROGRAMME PL/SQL
 Les instructions exécutables manquantes entraînent une erreur, car PL /
SQL ne prend pas en charge les blocs vides. Par exemple, l'exécution du
code ci-dessous entraîne une erreur:

 L'application va générer une erreur:

 Symbole "*" dans la ligne sous le mot clé "END;" signifie que le bloc qui se termine par
ce bloc est vide ou mal construit. Chaque bloc d'exécution a besoin d'instructions à faire, 16
même s'il ne fait rien, comme dans notre exemple.
LES VARIABLES
17
LES VARIABLES
 Identificateurs Oracle :
 30 caractères au plus
 commence par une lettre
 peut contenir lettres, chiffres, _, $ et #

 Pas sensible à la casse.

 Portée habituelle des langages à blocs.

 Doivent être déclarées avant d’être utilisées.


18
LES VARIABLES (2)

 Déclaration :
Nom_variable type_variable;

 Initialisation:

Nom_variable := valeur;

 Déclaration et initialisation :
Nom_variable type_variable := valeur;

19
LES VARIABLES
 var [CONSTANT] datatype [NOT NULL] [:= | DEFAULT
expr];

 Adopter des conventions pour nommer des objets.

 Initialiser les constantes et les variables déclarées NOT NULL.

 Initialiser les identifiants en utilisant l'opérateur d'affectation ( := )


ou le mot réservé DEFAULT.

 Déclarer au plus un identifiant par ligne.


20
 Le type peut être primitif ou objet.
COMMENTAIRES

 -- Pour une fin de ligne

 /* Pour plusieurs lignes */

21
LES TYPES DE VARIABLES
 VARCHAR2
 Longueur maximale : 32767 octets
 Syntaxe:
Nom_variable VARCHAR2(30);
Exemple: name VARCHAR2(30);
name VARCHAR2(30) := ‘toto’;

 NUMBER
Nom_variable NUMBER(long,dec);
avec Long : longueur maximale
Dec : longueur de la partie décimale
Exemple: num_tel number(10);
toto number(5,2)=142.12;

22
LES TYPES DE VARIABLES (2)
 DATE
Nom_variable DATE;

 Par défaut DD-MON-YY (18-DEC-02)


 Fonction TO_DATE
Exemple :
start_date := to_date(’29-SEP-2003’,’DD-MON-YYYY’);
start_date := to_date(’29-SEP-2003:13:01’,’DD-MON-YYYY:HH24:MI’);

 BOOLEAN

 TRUE, FALSE ou NULL


23
LES TYPES DE VARIABLES (3)

 Exemples :
 age number;
 nom varchar2(30);
 dateNaissance date;
 ok boolean := true;

 Déclarations multiples interdites :


 i, j integer;

24
EXEMPLES
c CHAR( 1 );
name VARCHAR2(10) := 'Scott';
cpt BINARY_INTEGER := 0;
total NUMBER( 9, 2 ) := 0;
order DATE := SYSDATE + 7;
Ship DATE;
pi CONSTANT NUMBER ( 3, 2 ) := 3.14;
done BOOLEAN NOT NULL := TRUE;
ID NUMBER(3) NOT NULL := 201;
PRODUIT NUMBER(4) := 2*100;
V_date DATE := TO_DATE('17-OCT-01','DD-MON-YY');
V1 NUMBER := 10;
V2 NUMBER := 20;
V3 BOOLEAN := (v1>v2);
Ok BOOLEAN := (z IS NOT NULL); 25
QUELQUES CONVENTIONS EN PL/SQL
 Deux variables peuvent partager le même nom si elles sont dans des
portées distinctes.

 Les noms des variables doivent être différents des noms des
colonnes des tables utilisées dans un bloc:
 v_empno (variable)
 g_deptno (globale)
 c_emp (CURSOR)

 L’identifiant est limité à 30 caractères, le premier caractère devant


être une lettre.

26
UTILISATION DES VARIABLES
 On utilise des variables pour :

 Le stockage temporaire de données

 La manipulation de valeur stockées

 La possibilité de les réutiliser

 Simplifier la maintenance du code

 Variable typée dynamiquement au moyen d’ attributs spéciaux 27


 %ROWTYPE ou %TYPE
AFFICHAGE 28

 Activer l’affichage à l’écran:


 set serveroutput on

 Affichage:
 dbms_output.put_line(chaîne);
 Utilise || pour faire une concaténation

28
BLOC PL/SQL ANONYME ACCÉDANT À
LA BASE
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
v_name VARCHAR2(10); Affectation
BEGIN
SELECT ename INTO v_name
FROM emp WHERE empno=7839;
DBMS_OUTPUT.PUT_LINE(v_name);
EXCEPTION
WHEN OTHERS
THEN NULL;
END;
/

PL/SQL Procedure successfully completed. 29


CAS À PLUSIEURS VARIABLES HÔTES
SET SERVEROUTPUT ON
SQL> DECLARE
v_ename VARCHAR2(12);
v_sal NUMBER(7,2);
BEGIN
SELECT ename,sal INTO
v_ename,v_sal
FROM emp WHERE ROWNUM = 1;

DBMS_OUTPUT.PUT_LINE(v_ename);
DBMS_OUTPUT.PUT_LINE(v_sal);
EXCEPTION
WHEN OTHERS Optionnel à
THEN NULL; ce stade
END; 30
/
VARIABLES DE SUBSTITUTION
 Les variables de substitution sont des variables qui permettent à
notre application d’interagir avec l’utilisateur et de lui demander de
saisir ses propre valeurs.

 Les variables de substitution sont généralement précédées par


l'esperluette (&) ou double esperluette (& &).

SQL> SET SERVEROUTPUT ON


SQL> DECLARE
x pls_integer := &&sv_var;
y pls_integer := &sv_var;
BEGIN
DBMS_OUTPUT.PUT_LINE (x || ' X ' ||y || ' = ' || x*y );
END;
/
Entrez une valeur pour sv_var : 2 31
2 X 2 = 4 Procédure PL/SQL terminée avec succès.
VARIABLES DE SUBSTITUTION
 Remarque: le message affiché pour lire la valeur de la variable est:
‘Entrez une valeur pour sv_var : ‘

 Pour personnaliser le message, il faut utiliser la directive ACCEPT:

SQL> Accept sv_var PROMPT ‘Veuillez saisir un nombre: ‘


SQL> Veuillez saisir un nombre: 6
SQL> DECLARE
x pls_integer := &sv_var;
y pls_integer := &sv_var;
BEGIN
DBMS_OUTPUT.PUT_LINE (x || ' X ' ||y || ' = ' || x*y );
END;
/
6 X 6 = 36 Procédure PL/SQL terminée avec succès.
32
VARIABLES TYPÉES
DYNAMIQUEMENT
33
LES TYPES DE VARIABLES
34 (4)

 Types composites adaptés à la récupération des colonnes et lignes


des tables SQL :
%TYPE, %ROWTYPE.

34
TYPAGE DYNAMIQUE %TYPE
 Déclarer une variable à partir :
 D'une autre variable déjà déclarée.
 D’une définition d’un attribut de la base de données.

 Préfixer %TYPE avec :


 La table et la colonne de la base de données.
 Le nom de la variable déclarée précédemment.

 PL/SQL évalue le type de donnée et la taille de la variable.

35
DÉCLARATION %TYPE36

 On peut déclarer qu’une variable est du même type qu’une


colonne d’une table ou d’une vue (ou qu’une autre variable) :

v_nom emp.name%TYPE;

36
L'ATTRIBUT %TYPE - EXEMPLE

DECLARE
v_ename scott.emp.ename%TYPE;
v_job emp.job%TYPE;
v_balance NUMBER( 7, 2 );
v_mini_balance v_balance%TYPE := 10;
v_rec emp%ROWTYPE

 Le type de données de la colonne peut être inconnu.


 Le type de données de la colonne peut changer en exécution.
 Facilite la maintenance.
37
VARIABLE TYPÉE DYNAMIQUEMENT
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
v_ename emp.ename%TYPE;
BEGIN
SELECT ename
INTO v_ename
FROM emp
WHERE ROWNUM = 1;
DBMS_OUTPUT.PUT_LINE(v_ename);
EXCEPTION
WHEN OTHERS
THEN NULL;
END;
/ 38
DÉCLARATION %ROWTYPE
39

 Une variable peut contenir toutes les colonnes d’une ligne d’une table:

v_employe emp%ROWTYPE;

 déclare que la variable v_employe contiendra une ligne de la table emp.

39
EXEMPLE D’UTILISATION
40

Declare
v_employe emp%ROWTYPE;
v_nom emp.name%TYPE;
begin
select * INTO v_employe
from emp where matr = 900;
v_nom := v_employe.name;
employe.dept := 20;
----------
insert into emp
values employe;
end;
/
40
ATTRIBUT %TYPE & %ROWTYPE
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
v_rec emp%ROWTYPE;
v_address VARCHAR2(64);
v_income emp.sal%TYPE; -- rec.sal%TYPE;
BEGIN
SELECT * Manipulation dans une
INTO v_rec FROM emp variable PL
WHERE ROWNUM = 1;
v_income := v_rec.sal*12;
v_address := _rec.ename || CHR(10) ||
v_income || CHR(10) ||
TO_CHAR(v_rec.hiredate,'DD/MM/YYYY');
DBMS_OUTPUT.PUT_LINE(v_address);
END;
/
SMITH 41
9600
17/12/1980
AFFECTATION 42

 2 façons de donner une valeur à une variable:


 := or default
 par la directive INTO de la requête SELECT

 Exemples :
 dateNaissance := ’10/10/2004’;
 select name INTO v_nom from emp where matr = 509;

42
LES OPÉRATEURS 43

PL/SQL supporte les opérateurs suivants :

 Arithmétique : +, - *, /,

Concaténation : ||

 Parenthèses (contrôle des priorités entre opérations): ()

Comparaison : =, !=, <, >, <=, >=, IS NULL, LIKE, BETWEEN, IN

 Logique : AND, OR, NOT

Affectation: := 43
PORTÉE DES VARIABLES
 Les blocs peuvent être imbriquées là où les instructions
exécutables sont autorisées.

 La section EXCEPTION peut contenir des blocs imbriqués.

 Les boucles possède chacune une portée


 les incréments y sont définis

 Un identifiant est visible dans les régions où on peut


référencer cet identifiant :
 Un bloc voit les objets du bloc de niveau supérieur.
44
 Un bloc ne voit pas les objets des blocs de niveau inférieur.
PORTÉE DES VARIABLES

45
PORTÉE DES VARIABLES
 La portée ou visibilité d'une variable est limitée au bloc PL/SQL
dans laquelle elle est déclarée. Elle est donc locale au bloc PL/SQL

 Dans cet exemple, la variable LC$Ch1 déclarée dans le sous-bloc, 46


n'existe plus dans le bloc principal.
PORTÉE DES VARIABLES
 Dans le cas de blocs imbriqués ou une même variable est déclarée
dans chaque bloc, la visibilité d'une variable se rapporte toujours à
la plus proche déclaration

47
LES BOUCLES
48
LOOP
 LOOP instruction; [instruction;[...]] END LOOP;

 Cette syntaxe met en place une boucle simple ou aucune condition


de sortie n'est indiquée
Il faut donc une instruction EXIT pour sortir de ce type de boucle

49
WHILE
 La boucle WHILE est exécutée jusqu'à ce que la condition de fin
soit remplie. 

 Cette boucle sera exécutée jusqu'à ce que la valeur courante de la


variable v_counter soit inférieure à dix. 50
FOR
 FOR variable_index IN [REVERSE] borne_début..borne_fin LOOP
instruction; [instruction;[...]] END LOOP;

 Cette syntaxe permet de mettre en place une boucle dont le nombre d'itérations
est fixé dès l'entrée.

- Variable_index: représente le nom de la variable qui servira d'indice. Cette variable ne


nécessite pas de définition préalable dans la section déclarative.

- Reverse: permet de faire varier l'indice dans le sens contraire (décrémentation).

-borne début: représente l'indice de départ.

- borne fin: représente l'indice de fin.


51
FOR
 Exemple1:

52
FOR
 Exemple2:

53
BRANCHEMENTS
CONDITIONNELS
54
IF-THEN
 Exemple:

55
IF-THEN-ELSE
 Exemple:

56
IF-THEN-ELSIF-ELSE
 Exemple:

57
CASE
 Cette instruction permet de mettre en place des structures de test
conditionnel de type IF .. ELSE .. END IF,
à la grande différence qu'elle est utilisable dans les requêtes SQL

58
GOTO
 Cette instruction permet d'exécuter un saut dans le code vers le label
précisé:

59

Vous aimerez peut-être aussi