Cours1 PLSQL FSTG
Cours1 PLSQL FSTG
Cours1 PLSQL FSTG
Langage PL/Sql
1
INTRODUCTION
2
GÉNÉRALITÉS 3
5
UTILISATION DE PL/SQL
6
6
PL/SQL 7
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
8
AVANTAGES DU PL/SQL
9
Portabilité
Facilité de programmation
9
OBJECTIFS DU CHAPITRE
A la fin de ce chapitre, vous saurez:
10
11
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.
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:
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 #
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];
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;
BOOLEAN
Exemples :
age number;
nom varchar2(30);
dateNaissance date;
ok boolean := true;
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)
26
UTILISATION DES VARIABLES
On utilise des variables pour :
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;
/
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.
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.
35
DÉCLARATION %TYPE36
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
Une variable peut contenir toutes les colonnes d’une ligne d’une table:
v_employe emp%ROWTYPE;
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
Exemples :
dateNaissance := ’10/10/2004’;
select name INTO v_nom from emp where matr = 509;
42
LES OPÉRATEURS 43
Arithmétique : +, - *, /,
Concaténation : ||
Affectation: := 43
PORTÉE DES VARIABLES
Les blocs peuvent être imbriquées là où les instructions
exécutables sont autorisées.
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
47
LES BOUCLES
48
LOOP
LOOP instruction; [instruction;[...]] END LOOP;
49
WHILE
La boucle WHILE est exécutée jusqu'à ce que la condition de fin
soit remplie.
Cette syntaxe permet de mettre en place une boucle dont le nombre d'itérations
est fixé dès l'entrée.
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