SlideShare une entreprise Scribd logo
1  sur  70
Télécharger pour lire hors ligne
INTRODUCTION À LA
PROGRAMMATION PL/SQL

Abdelouahed Sabri
abdelouahed.sabri@gmail.com

1
PLAN
Introduction,
 Avantages de PL/SQL,
 Les principales caractéristiques du PL / SQL,
 Les variables et constantes,
 Les structures de contrôle
 Interaction avec la base de données à partir de PL/SQL
 Les sous programmes PL/SQL




Déclencheurs (Triggers)
2
BIBLIOGRAPHIE
Christian Soutou « SQL pour Oracle »
 Gilles Briard « Oracle10g sous Windows »
 John Russell « PL_SQL Reference User guide 10g
Release »
 Denis Roegel « Le langage procédural PL/SQL »
 SheikYerbouti « Oracle PL/SQL »


3
PRÉ-REQUIS POUR CE COURS
Des connaissances dans le Structured Query
Language SQL,
 des connaissances de base dans la
programmation (IF-THEN comparaisons,
boucles, …)
 Des connaissances dans le SGBD Oracle,


4
INTRODUCTION
PL/SQL (Procedural Language / SQL), l’extension
procédurale proposée par Oracle pour SQL (L4G),
 Il permet de combiner des requêtes SQL
(SELECT, INSERT, UPDATE et DELETE) et des
instructions procédurales (boucles, conditions...),


 Créer

des traitements complexes destinés à être
stockés sur le serveur de base de données (objets
serveur),
 Comme on le sait, les structures de contrôle
habituelles d’un langage (IF, WHILE…) ne font pas
partie intégrante de la norme SQL. Oracle les prend
en compte dans PL/SQL.

5
AVANTAGES DE PL/SQL 1/2


Ce langage propose des-performances pour le
traitement des transactions et offre les avantages
suivants:




Intégration complète du SQL,
Prise en charge de la programmation orientée objet
(surcharge),
Parfaite Intégration avec Oracle et Java,
en fait PL/SQL est un langage propriétaire de Oracle,
 On peut lancer des sous-programme Pl/SQL à partir de
Java et de même, on peut appeler des procédures Java à
partir d’un block Pl/SQL


6
AVANTAGES DE PL/SQL 2/2


Portabilité totale : Toutes les bases de données Oracle
comportent un moteur d’exécution PL/SQL.
les programmes PL/SQL sont indépendants du système
d’exploitation qui héberge le serveur Oracle. En changeant
de système, les applicatifs n’ont pas à être modifiés.



Facilité de programmation :
PL/SQL est un langage simple d’apprentissage et de mise
en œuvre. Sa syntaxe claire offre une grande lisibilité en
phase de maintenance de vos applications. De nombreux
outils de développement, autres que ceux d’Oracle 10g,
autorisent la programmation en PL/SQL dans la base de
données.
7
AVANTAGES DE PL/SQL
EXEMPLE D’INTÉGRATION ENTRE PL/SQL ET SQL


Vous n'avez pas à traduire les types de données entre SQL
et PL/SQL:


On retrouvera avec PL/SQL tous les types de données et
instructions disponibles sous SQL, et des mécanismes pour
parcourir des résultats de requêtes (curseurs), pour traiter des
erreurs (exceptions), pour manipuler des données complexes
(paquetages DBMS_xxx) et pour programmer des transactions
« COMMIT, ROLLBACK, SAVEPOINT »

 Cette intégration nous permet d'économiser à la fois le

temps d'apprentissage et le temps d’exécution. Les
fonctionnalités du langage PL/SQL nous permettent de
travailler avec des colonnes et des lignes des tables sans
préciser les types de données, ce qui nous permet
d’économiser du temps d'entretien lorsque la définition des
tables change.
8
AVANTAGES DE PL/SQL
PL/SQL PROPOSE UNE BONNE PERFORMANCE


Dans PL/SQL, ce ne sont plus des requêtes SQL qui
sont transmis un à un au moteur de base de données,
mais des blocs et des sous-programmes, Alors:
Le traitement des données est donc interne à la base, ce qui
réduit considérablement le trafic entre celle-ci et
l’application,
 Il est préférable de travailler avec un bloc PL/SQL plutôt
qu’avec une suite d’instructions SQL susceptibles
d’encombrer le trafic réseau


9
AVANTAGES DE PL/SQL
PL/SQL PROPOSE UNE BONNE PERFORMANCE


Dans un environnement clientserveur, chaque instruction
SQL donne lieu à l’envoi d’un
message du client vers le
serveur suivi de la réponse du
serveur vers le client.



Un bloc PL/SQL donne lieu à
un seul échange sur le réseau
entre le client et le serveur. Les
résultats intermédiaires sont
traités côté serveur et seul le
résultat final est retourné au
client
10
LES PRINCIPALES CARACTÉRISTIQUES DU
PL/SQL


PL/SQL combine la puissance de manipulation de
données d’SQL avec la puissance de traitement des
langages procédurales:




Vous pouvez contrôler le déroulement du programme avec
des déclarations comme IF et LOOP
Vous pouvez déclarer des variables, définir des procédures
et fonctions et faire la gestion des différentes exceptions,
PL/SQL vous permet de décomposer des problèmes
complexes en compréhensible code (ou procédures), et
permet l’utilisation de ce code dans plusieurs applications.

11
LES PRINCIPALES CARACTÉRISTIQUES DU
PL/SQL


La figure suivante présente la façon avec laquelle le
moteur PL/QL traite un bloc PL/SQL anonyme.
 Le

moteur PL/SQL exécute des instructions procédurales,
mais envoi des instructions au moteur SQL dans la base de
données Oracle.

12
STRUCTURE D’UN PROGRAMME PL/SQL
PL/SQL est un langage structuré en blocs, constitués
d'un ensemble d'instructions,
 Un bloc PL/SQL peut être "externe", on dit alors qu'il
est anonyme, ou alors stocké dans la base de données
sous forme de procédure, fonction ou trigger (on lui
affecte un nom),
 Un bloc PL / SQL contient trois parties :


une partie déclarative,
2. une partie exécutable,
3. une partie pour la gestion des exceptions.
NB: Seule la partie exécutable est nécessaire.
1.

13
STRUCTURE D’UN PROGRAMME PL/SQL


La première partie d’un code est la partie déclarative:
Définition des types, variables curseurs, exceptions, etc.
 Ces éléments sont manipulés dans la partie exécutable.
 Le nom réservé est DECLARE.
NB: Cette section est optionnelle.




La deuxième partie est la partie exécutable:
Contient le code PL/SQL incluant ou non des directives SQL.
 Cette partie de code débute par le mot réservé BEGIN et se
termine par le mot réservé END; (ne pas oublier le pointvirgule).
NB: Cette section est obligatoire.




La troisième section est la partie de gestion des
exceptions.
Cette partie débute par le mot réservé EXCEPTION.
 Elle permet de traiter les erreurs retournées par le SGBD à la
suite d’exécutions d’instructions SQL.
NB: Cette partie est optionnelle.


14
STRUCTURE D’UN PROGRAMME PL/SQL


Un bloc peut être imbriqué dans le code d’un autre bloc
(on parle de sous-bloc).




NB: Un sous-bloc commence par BEGIN et se termine par
END;

La portée d’un objet (variable, type, curseur, exception,
etc.) est la zone du programme qui peut y accéder

15

NB: Un sous-bloc peut aussi se trouver dans la partie des exceptions
LE JEU DE CARACTÈRES EN PL/SQL


Les caractères qui sont interprétés par PL/SQL, comme
SQL, sont :




Les alphanumérique : lettres A à Z et a à z ; chiffres de 0 à 9
Les symboles ( ) + - * / < > = ! ~ ^ ; : . ' @ % , " # $ & _ | { } ? [ ]
Les caractères spéciaux comme : tabulations, espaces et
retours-chariot

NB: PL/SQL n’est pas sensible à la casse Tva=TVA

16
LE JEU DE CARACTÈRES EN PL/SQL


Pour une meilleure lisibilité, on peut séparer les
unités lexicales par des espaces, des tabulations
et des retours à la ligne.
Code lisible
Code (correct) peu lisible

…
IF x>y THEN max:=x;ELSE max:=y;END IF;

…
IF x > y THEN
max := x;
ELSE
max := y;
END IF;
…
17
LES IDENTIFIANTS


Avant de parler des différents types de variables
PL/SQL, décrivons comment il est possible de nommer
des objets PL/SQL (variables, curseurs, exceptions,
etc.).


Un identificateur commence par une lettre suivie (optionnel)
de symboles (lettres, chiffres, $, _, #).




Certains symboles sont interdits: &, -, /, +, :

Un identificateur peut contenir jusqu’à trente caractères.

Identifiants autorisés
A
AA2
TVA#
Hors_Taxe
Requéte$Sql

Identifiants non autorisés
A&A (symbole &)
2A (debut chiffre)
Hors-Taxe (symbole -)
Vrai/Faux (symbole /)
Requéte Sql (symbole espace)

18
LES COMMENTAIRES


PL/SQL supporte deux types de commentaires :
1.
2.

Mono-lignes;
commençant au symbole -- et finissant à la fin de la ligne,
Multi-lignes;
commençant par /* et finissant par */

BEGIN
…
-- Lecture du nom d’un utilisateur utilisant son ID
SELECT nom INTO v_nom FROM T_USER WHERE id=5;
/*
Ecriture dans la table Log pour spécifier quel utilisateur est connecté à l’application en spécifiant:
1- le nom
2-l’heure et la date
*/
19
INSERT INTO log VALUES (v_nom, v_heure, v_date);
…
END;
LES MOTS RÉSERVÉS


Certains identifiants, appelés mots réservés, ont une
signification syntaxiques particulière dans PL/SQL.


Par exemple, les mots BEGIN et END sont réservés.
Une redéfinition d’un mot réservé provoque une erreur de
compilation
 Souvent, les mots réservés sont écrits en majuscules pour
une meilleure lisibilité


20
EXÉCUTION D’UN PROGRAMME PL/SQL


Pour exécuter un programme PL/SQL, l’outil le plus
simple livré par Oracle est SQL*Plus:
 Cet outil permet:
D’accéder à l’ensemble des fonctionnalités d’Oracle
(10g) à partir d’une interface textuelle identique
(Console), quel que soit le système d’exploitation utilisé
 D’exécuter
de façon interactive des ordres SQL
unitaires,
 De lancer des fichiers contenant un ensemble d’ordres
SQL.


21
EXÉCUTION D’UN PROGRAMME PL/SQL
INTERFACES SQL*PLUS


Il existe plusieurs interfaces SQL*Plus Sous Windows :





En mode ligne de commande (qui ressemble à une fenêtre DOS ou
telnet)
Avec une interface graphique SQL*Plus Worksheet de l’outil
Enterprise Manager
Avec le navigateur via l’interface Web iSQL*Plus (i comme «
Internet »:




Cette interface s’apparente assez à celle de EasyPHP en étant très
intuitive).

NB : Les interfaces graphiques SQL*Plus et iSQL*Plus ne
sont plus offertes depuis la version 11g.
L’interface en mode ligne de commande reste toutefois disponible
pour toutes les versions.
 Pour cela on va s’intéresser à SQL*Plus en mode ligne de
commande.
22

EXÉCUTION D’UN PROGRAMME PL/SQL
INTERFACES SQL*PLUS


Pour lancer SQL*Plus, tapez dans une fenêtre
Console DOS (bien sur on suppose que Oracle (10g)
est installé):
C:> sqlplus



Il y’a deux modes de connexions:



Mode utilisation simple de la base de données,
Mode avec privilèges pour administration.
 Le privilège SYSOPER: permet à un administrateur
de la base de données d’exécuter: STARTUP,
SHUTDOWN, ALTER DATABASE OPEN/MOUNT,
ALTER DATABASE BACKUP, ARCHIVE LOG, and
RECOVER
 Le privilège SYSDBA: contient tout les privilèges y
compris ADMIN OTPION et SYSOPER

23
EXÉCUTION D’UN PROGRAMME PL/SQL
INTERFACES SQL*PLUS


Pour se connecter en mode administration, dans
la fenêtre Console DOS on tape :

# Connexion avec un utilisateur ayant reçu le privilège SYSDBA
connect utilisateur/passwd as SYSDBA.
# connexion avec un utilisateur ayant reçu le privilège SYSOPER
connect utilisateur/passwd as SYSOPER

24
EXÉCUTION D’UN PROGRAMME PL/SQL
INTERFACES SQL*PLUS


On peut aussi saisir des options lors du lancement de
SQL*Plus :
C:> sqlplus -S utilisateur/mot_de_passe@base_cible @fichier_sql





-S pour spécifier que c’est un mode « silencieux »
l’utilisateur et le mot de passe peuvent être suivis de l’alias
Oracle Net de la base cible à laquelle vous souhaitez vous
connecter. Dans ce cas, le signe @ est accolé au mot de passe
un fichier de commande contenant des ordres SQL, des
commandes SQL*Plus et PL/ SQL peut être automatiquement
lancé, un espace doit alors précéder le signe @
25
EXÉCUTION D’UN PROGRAMME PL/SQL
INTERFACES SQL*PLUS


Quelques commandes utiles:


HOST pour lancer des commandes OS à partir de la session
SQL*Plus,:




Pour lister le contenu d’un répertoire :
HOST DIR
NB: Celle-ci ne termine pas votre session SQL*Plus



DISC (DISCONNECT) pour se déconnecter de la base Oracle cible



EXIT ou QUIT pour se déconnecter et terminer une
session SQL*Plus
LIST ou L permet de visualiser la dernière commande
SQL saisie
RUN ou R exécute l’ordre SQL présent dans le buffer




NB: Un bloc d’instructions PL/SQL doit se terminer par une
26
« / ».
EXÉCUTION D’UN PROGRAMME PL/SQL
INTERFACES SQL*PLUS


Quelques commandes utiles:
 ED (EDIT)
permet d’appeler l’éditeur de texte et y place l’ordre SQL
présent dans le buffer courant.


Pour préciser l’éditeur de texte de votre choix (ici notepad), utilisez
la commande SQL*Plus ;

SQL> def _editor = notepad
ed mon_fichier.sql
# si le fichier n’existe pas, il sera crée


Pour exécuter un fichier de commande à partir de SQL*Plus
start mon_fichier.sql
-- ou bien
@mon_fichier.sql

27
EXÉCUTION D’UN PROGRAMME PL/SQL
INTERFACES SQL*PLUS


Quelques commandes utiles:
 SET TIMING ON|OFF
permet de mesurer la durée d’exécution de vos ordres SQL (en
millisecondes).
 SET SERVEROUTPUT ON|OFF
Permet d’activer ou de désactiver l’affichage à la console
 PROMPT ‘Texte à afficher à la console’




ACCEPT nom_var




Permet de récupérer une valeur saisie par l’utilisateur et de la stocker
dans nom_var. pour l’utiliser dans un bloc Pl/SQL on utilise
‘&nom_var’

VARIABLE nom_var TYPE





Permet d’afficher un texte à la console

Déclarer une variable globale on précisant son type
Pour l’utiliser en PL/SQL on utilise :nom_var

PRINT var


Afficher le contenu de var

28
EXÉCUTION D’UN PROGRAMME PL/SQL
EXEMPLE


Exemple:
Créer un nouvel utilisateur.


Nb: On se connecte sous le compte SYSTEM (le mot de
passe SYSTEM est saisi lors de l’installation d’oracle).
connect SYSTEM/pass as SYSDBA
-- sous l’utilisateur SYSTEM
create user SIRM identified by SIRMpass;
-- Se connecter sous SIRM
Connect SIRM/SIRMpass as sysdba
-- executer un script
start ORACLE_HOMERDBMSADMINSCRIPT.SQL
-- Afficher le nom de l’utilisateur courant
show user

29
LES VARIABLES ET CONSTANTES


PL / SQL permet de déclarer des constantes (valeur
invariable) et des variables pour les utiliser dans des
programme SQL.
 Il

faut déclarer une constante ou variable avant de la
référencer.



Déclaration:




Les variables et les constantes sont déclarées
éventuellement initialisées) dans la section DECLARE.

(et

La syntaxe:

nom_de_la_variable [CONSTANT] TYPE_DE_DONNEE [NOT NULL] [:= | DEFAULT expression];

En plus des types de données propre à PL/SQL comme BOOLEAN30
ou PLS_INTEGER, Les variables peuvent avoir n'importe quel
type SQL comme CHAR, DATE, ou NUMBER.
LES VARIABLES ET CONSTANTES
DÉCLARATION:


Exemple:






Déclarer une variable nommée v_telephone qui va contenir 10
chiffres (Type NUMBER (10))
Déclarer une variable nommée v_disponible pour contenir une
valeur booléenne (BOOLEAN) TRUE ou FALSE.
Déclarer une variable v_TVA de type NUMBER et l’initialiser par
0.02
La syntaxe pour déclarer une variable est la suivante:

nom_de_la_variable [CONSTANT] TYPE_DE_DONNEE [NOT NULL] [:= | DEFAULT expression];

DECLARE
v_telephone NUMBER(10);
v_disponible BOOLEAN;
v_TVA NUMBER :=0.02;

31
LES VARIABLES ET CONSTANTES
DÉCLARATION:


Les constantes:
Pour la déclaration des constantes on utilise le
mot réservé CONSTANT

nom_de_la_variable [CONSTANT] TYPE_DE_DONNEE [NOT NULL] [:= | DEFAULT expression];

NB: Il faut initialiser les constantes lors de leur déclaration.
 Exemple:
DECLARE
c_TVA CONSTANT NUMBER :=0.02;
…
BEGIN
…
END

32
LES VARIABLES ET CONSTANTES
DÉCLARATION:
 La portée d'une variable:
Est la région d'une unité de programme (bloc ou sousprogramme) à partir duquel on peut faire référence à
cet identifiant.




Les identifiants (variables) qui sont déclarés dans un bloc
PL/SQL sont considérés comme locaux à ce bloc et globaux à
ces sous-blocs.
Bien qu’on ne puisse pas déclarer un identifiant deux fois
dans le même bloc, on peut déclarer le même identifiant
dans deux blocs différents.




Les deux éléments (variables) représentés par l'identifiant sont
distincts, et tout changement dans l'un n'affecte pas l'autre.

Un bloc ne peut pas faire référence à identifiants qui est
déclaré dans l’autre bloc parce que ces identifiants ne sont33
ni locaux ni globaux au bloc.
LES VARIABLES ET CONSTANTES
AFFECTATION:

L’affectation d’une valeur à une variable est effectuée
en PL/SQL en utilisant l’operateur « := »
 L’affectation peut être effectuée dans la partie
déclaration comme dans la partie exécutable;


DECLARE
nom_de_la_variable TYPE_DE_DONNEE [NOT NULL] [:= | DEFAULT expression];
-- ou bien
BEGIN
nom_de_la_variable := valeur;
…
END ;
34
LES VARIABLES ET CONSTANTES
AFFECTATION:


Exemple:
DECLARE
v_telephone NUMBER(10);
v_disponible BOOLEAN;
v_DateDeNaissance Date;
c_TVA CONSTANT NUMBER :=0.02;
v_TTC NUMBER ;
v_HT NUMBER ;
BEGIN
v_disponible :=TRUE ;
v_telephone :=0666666666;
v_TTC := v_HT + c_TVA ;
END;
/
35
LES VARIABLES ET CONSTANTES
AFFECTATION:


Une autre façon pour affecter à une variable une valeur est
d’utiliser la directive DEFAULT.

v_pays CHAR(5) := ’MAROC’ ;
/* Équivaut à
v_pays CHAR(5) DEFAULT 'MAROC';
*/


La troisième façon pour attribuer des valeurs à une variable
consiste à sélectionner (ou récupérer) des valeurs de la base de
données:


Dans l'exemple ci-dessous, nous allons récupérer le nom d’un employé
dont ID=10 et l’enregistrer dans la variable v_nom.

BEGIN
SELECT nom INTO v_nom FROM T_EMPLOYE WHERE ID=10;


Il existe d’autres façons pour affecter à une variable une valeur

36
LES VARIABLES ET CONSTANTES
AFFECTATION:







NB1 : La contrainte NOT NULL doit être suivie d’une clause
d’initialisation.
NB2 : À l’inverse de la plupart des langages de programmation, les
déclarations multiples ne sont pas permises.
NB3 : Par défaut, les variables sont initialisées à la valeur NULL
NB4: Seules les valeurs TRUE, FALSE et NULL peuvent être
affectée à une variable booléenne..

37
LES VARIABLES ET CONSTANTES


EXEMPE:

DECLARE
-- Déclarations de variables.
v_nom VARCHAR2(7);
v_alias VARCHAR2(7);
v_age NUMBER(2);
v_naissance DATE;
v_existant BOOLEAN NOT NULL DEFAULT FALSE;
BEGIN
v_nom := 'Mohamed'; -- Affectation d’une chaîne de caractères.
v_alias:= v_nom; -- Affectation d’une variable.
v_age:= 23; --Affectation d’un nombre.
v_naissance := '01-01-2000'; -- Affectation de dates.
v_existant := TRUE; -- Affectation d’un booléen.
/*Affectation d’une chaîne de caractères par une requête.*/
SELECT nom INTO v_nom FROM T_User WHERE age= 21;
END;

38
LES TYPES DE DONNÉES




En plus des types de données propre à PL/SQL, on peut
utiliser tous les types de données SQL (NUMBER, CHAR,
BOOLEAN,
VARCHAR2,
DATE,
TIMESTAMP,
INTERVAL, BLOB, ROWID…)
On peut distinguer:





Type scalaire: n'a pas de composants internes. Il contient une
valeur singulière, comme un nombre ou une chaîne de caractères.
Type composé: a des composants internes qui peuvent être
manipulés individuellement, telles que les éléments d'un tableau.
Type référence: contient les valeurs, appelées pointeurs, qui
désignent d’autres éléments du programme.
Type LOB (Large Object Binary): est un type de données ORACLE
permettant de stocker des données de grande taille allant jusqu’à
39
4 Go, tels que des blocs de texte ou des images graphiques.
LES TYPES DE DONNÉES


Les types scalaires sont répartis en quatre familles, ou
on trouve les numéros, caractères, booléens, et les
données date/heure.

40
LES TYPES DE DONNÉES
TYPES SCALAIRES


Le type scalaire permet de stocker des données
numériques (entiers, nombres réels, et nombres à
virgule flottante), représenter des quantités et de
faire des calculs.






BINARY_INTEGER,
PLS_INTEGER,
BINARY_FLOAT,
BINARY_DOUBLE,
NUMBER.

41
LES TYPES DE DONNÉES
TYPES SCALAIRES


NUMBER
On utilise le type de données NUMBER pour stocker des
numéros à virgule fixe ou à virgule flottante.
Le domaine des valeurs sont de1E-130 à 10E125.
 La précision est le nombre de chiffres à droite de la virgule.
La syntaxe est la suivante :


NUMBER[(precision[,scale])] -- scale max = 38, la valeur par défaut est 38



Exemple:
v_note NUMBER(2,1) :=10.5;
v_note NUMBER:=9.05;
v_note NUMBER (2):=10; – même que la déclaration NUMBER(2,0)

43
LES TYPES DE DONNÉES
LES TYPES CARACTÈRE ET CHAINE DE CARACTÈRES


Les types de données caractères permettent de stocker
des données alphanumériques, représenter des mots et
du texte, et de manipuler des chaînes de caractères.




CHAR
VARCHAR2
…

44
LES TYPES DE DONNÉES
LES TYPES CARACTÈRE ET CHAINE DE CARACTÈRES


CHAR


Le type de données CHAR est utilisé pour stocker des
caractères (de longueur fixe),

CHAR[(max_size )] – max_size comprise entre 1 et 32767 (par défaut égale à 1).

 Exemple
v_char CHAR :='A';
v_string CHAR(5) :='SALAM';

45
LES TYPES DE DONNÉES
LES TYPES CARACTÈRE ET CHAINE DE CARACTÈRES


VARCAHR2:



Le type de données VARCHAR2 est utilisé pour stocker les
données de type chaine de caractères
Le type de données VARCHAR2 prend un paramètre
obligatoire qui spécifie une taille maximale qui peut aller de
1 à 32767 octets
VARCHAR2(maximum_size);

NB: on ne peut pas insérer des valeurs VARCHAR2 plus grandes
que 4000 octets dans une colonne de type VARCHAR2 d’une base
de données.
46
LES TYPES DE DONNÉES
TYPES POUR LES GRANDS OBJETS (LOB LARGE OBJECT)

Les types de données LOB (large object) permettent de
stocker jusqu'à quatre giga-octets, en taille, de blocs de
données non structurées (comme des textes, images
graphiques, clips vidéo et des signaux sonores).
 Et, ils permettent un accès par morceaux efficace, et
non séquentiel, aux données.






BFILE: utilisé pour stocker de grands objets binaires dans
des fichiers systèmes
BLOB: utilisé pour stocker de grands objets binaires dans la
base de données
CLOB: utilisé pour stocker de grands blocs de données de
types caractères dans la base de données
47
LES TYPES DE DONNÉES
LES TYPES BOOLÉENS


PL/SQL propose un type pour représenter des valeurs
booléennes (vrai et faux).


Le type de données BOOLEAN peut être utilisé pour
stocker les valeurs logiques VRAI, FAUX, et NULL.



Du fait que SQL ne dispose pas d'un type équivalent, on ne
peut utiliser des variables booléennes que dans des

contextes PL/SQL, mais pas à l'intérieur des requêtes SQL.

48
LES TYPES DE DONNÉES
LES TYPES DATE ET TIMESTAMP


DATE:
 Utilisé pour stocker des variables datetimes de
longueur fixe, qui inclut le moment de la journée en
secondes depuis minuit.
Par défaut, la valeur du jour est le premier jour du mois en
cours, la valeur de l’heure égale à minuit,
 Sous oracle, la fonction date SYSDATE renvoie la date et
l'heure courante.


49
LES TYPES DE DONNÉES
LES TYPES DATE ET TIMESTAMP


DATE:


PL/SQL propose des fonctions pour la manipulation des
dates

Nom de la fonction

Description

ADD_MONTHS (date, nbre_de_moi)

Ajoute un nombre spécifié de
mois à une date.
Retourne le dernier jour du mois
de la date spécifiée.

LAST_DAY ( date )

MONTHS_BETWEEN ( date2, date1 ) Calcule le nombre de mois entre
deux dates.
NEXT_DAY( date, 'jour' )
Date du prochain jour après date
où jour est un jour de la semaine
50
LES TYPES DE DONNÉES
LES TYPES DATE ET TIMESTAMP


DATE:


Exemples

DECLARE
v_date DATE :='01-10-2010';
BEGIN
DBMS_OUTPUT.PUT_LINE(ADD_MONTHS(v_date,3)); -- 01/01/11
DBMS_OUTPUT.PUT_LINE(LAST_DAY(v_date)); -- 31/10/10
DBMS_OUTPUT.PUT_LINE(MONTHS_BETWEEN(v_date,
ADD_MONTHS(v_date,-2))); -- 2
DBMS_OUTPUT.PUT_LINE(NEXT_DAY(v_date, 'Lundi')); -- 04/10/10
End;
/



On peut tester ces fonctions directement en utilisant la table
system dual:
51
 SELECT SYSDATE from dual;
 SELECT NEXT_DAY( '31/12/2013', 'Lundi' ) from dual ;
LES TYPES DE DONNÉES
LES SOUS-TYPES

Un sous-type n’introduit pas un nouveau type mais en
restreint (limite) un existant.
 PL/SQL

propose plusieurs sous-types prédéfinis et il est
possible de définir des sous-types personnalisés

Sous-type

Type restreint

Caractéristiques

CHARACTER

CHAR

Mêmes caractéristiques.

INTEGER

NUMBER(38,0)

Entiers.

BINARY_INTEGER

NUMBER

….

NATURAL, POSITIVE
NATURALN, POSITIVEN

Non négatif.
BINARY_INTEGER

SIGNTYPE
DEC, DECIMAL, NUMERIC

Non négatif et non nul.
Domaine de valeurs {–1, 0, 1}.

NUMBER

Décimaux, précision de 38
chiffres.

52
LES TYPES DE DONNÉES
PERSONNALISER UN TYPE


Il est possible de définir un sous-type (dit «personnalisé»
car n’existe que durant le programme) par la syntaxe
suivante :
SUBTYPE nomSousType IS typeBase[(contrainte)] [NOT NULL];



typeBase est un type prédéfini ou personnalisé.
contrainte s’applique au type de base et concerne seulement la
précision ou la taille maximale.

DECLARE
SUBTYPE dateNaiss_sty IS DATE NOT NULL;
SUBTYPE insee_sty IS NUMBER(13);
SUBTYPE nombre_sty IS NUMBER(2,2);

53
LES TYPES DE DONNÉES
TYPES DÉRIVÉS


Pour faciliter la maintenance du code qui interagit
avec la base de données, on peut également utiliser des
types qui sont dérivés de la base sans à les connaitre.
Ainsi, on peut utiliser les deux attribues:



%TYPE,
%ROWTYPE

54
LES TYPES DE DONNÉES
TYPES DÉRIVÉS


%TYPE


L’attribut %TYPE fait référence à un type existant qui est
soit une colonne d'une table soit un type défini
précédemment.


Il fournit le type de données d'une variable ou une colonne
de base de données.

 Cela

est particulièrement utile lorsqu’on déclare des
variables qui vont contenir des valeurs de la base de
données.

55
LES TYPES DE DONNÉES
TYPES DÉRIVÉS


%TYPE


Exemple:
DECLARE
v_adresse T_utilisateurs.adresses%TYPE;



Déclarant v_adresse avec %TYPE a deux avantages.
1. On n’est pas obligé de savoir exactement le type de
données du champ adresses de la table T_utilisateurs
2. Si on modifie la définition du champ adresses dans la
table T_utilisateurs (changer la taille ou le type) de la
base de données, le type de la variable v_adresse va
changer au moment de l'exécution.

56
LES TYPES DE DONNÉES
TYPES DÉRIVÉS


%ROWTYPE
 L'attribut
%ROWTYPE
fournit
un
type
d'enregistrement qui représente une ligne dans une
table.
L’enregistrement peut stocker une ligne entière
sélectionnée à partir d’une table ou récupérée à
partir d'un curseur ou variable de curseur.
Les
éléments
de
cet
enregistrement
correspondants portent le même nom et type de
données.
57
LES TYPES DE DONNÉES
TYPES DÉRIVÉS


%ROWTYPE

DECLARE
rty_utilisateurs T_utilisateur%ROWTYPE; -- on déclare une variable type enregistrement






Ici, nous avons déclaré un enregistrement nommé rty_utilisateurs.
Les champs de cet enregistrement ont les mêmes noms et types de
données que les colonnes dans la table T_utilisateur.

L’enregistrement peut contenir toutes les colonnes d’une table ou
seulement certaines.
Nous détaillerons, dans la suite, le mécanisme des curseurs
(CURSOR) qui emploient beaucoup cette directive.
Pour accéder à un champ on utilise la notation du « point » comme
sur l’exemple suivant:
58

v_ID :=rty_utilisateurs.ID ; -- ID est le nom d’un champ dans la table T_utilisateur
LES TYPES DE DONNÉES
TYPES DÉRIVÉS


%ROWTYPE


Exemple:

DECALRE
rty_utilisateurs T_utilisateur%ROWTYPE; -- on déclare une variable type enregistrement
v_ID T_utilisateur.ID%TYPE ;
BEGIN
SELECT * INTO rty_utilisateurs FROM T_utilisateur where ID=5 ;
v_ID :=rty_utilisateurs.ID;
rty_utilisateurs.Nom := Tarik ;
rty_utilisateurs.Prénom := Ilias ;
-- Insertion dans la table T_utilisateur à partir d’un enregistrement.
INSERT INTO T_utilisateur VALUES rty_utilisateurs ;
END ;

NB: Les colonnes récupérées par la directive %ROWTYPE
n’héritent pas des contraintes NOT NULL qui seraient
éventuellement déclarées au niveau de la table.

59
LES TYPES DE DONNÉES
TYPES COMPOSÉS


RECORD
 Le type de données RECORD (disponible depuis la
version 7) définit nos propres structures de données
(l’équivalent du struct en C).


La syntaxe pour déclarer une variable de type
RECORD est la suivante :

TYPE nomRecord IS RECORD ( nomChamp typeDonnées [[NOT NULL] {:= | DEFAULT}
expression] [,nomChamp typeDonnées… ]… );
60
LES TYPES DE DONNÉES
TYPES COMPOSÉS


RECORD


Exemple:

DECLARE
/*
Déclaration d’un RECORD contenant 3 champs, dont un est non nul avec initialisation du
champ qtyInStock
*/
TYPE R_product IS RECORD (id NUMBER, identifiant CHAR(15) NOT NULL,
qtyInStock NUMBER := 50);
r_produit R_product;
BEGIN
-- Affectation d’un record
r_produit.id:=5;
r_produit.identifiant :=’Lait’ ;
r_produit.qtyInStock :=150 ;
61
END;
LES TYPES DE DONNÉES
TYPES COMPOSÉS


RECORD:



NB1: Les types RECORD ne peuvent pas être stockés dans
une table de la base de données.
NB2: Il est possible qu’un champ d’un RECORD soit luimême un RECORD (nested record), ou soit déclaré avec les
directives %TYPE ou %ROWTYPE.

TYPE R_product IS RECORD (id NUMBER, identifiant CHAR(15) NOT NULL, qtyInStock
NUMBER := 50);
TYPE R_stock IS RECORD (produit R_product, fournisseur T_ fournisseur%ROWTYPE,
employe T_employe.id%TYPE) ;
62

NB : Les RECORD ne peuvent pas être comparés (nullité, égalité et inégalité).
CONVERSION DE TYPES DE DONNÉES EN
PL/SQL


Parfois, il est nécessaire de convertir une valeur d'un
type de données à un autre.
Par exemple, pour utiliser une date dans un rapport, il
faut la convertir en une chaîne de caractères.
 PL/SQL supporte à la fois la conversion explicite et
implicite (automatique) de types de données.
 Il est préférable d’utiliser la conversion explicite
pour s’assurer du bon fonctionnement de notre
programme.
63
CONVERSION DE TYPES DE DONNÉES EN PL/SQL
CONVERSION EXPLICITE

On utilise des fonctions fournies pas PL/SQL.
Exemple:




Pour convertir une valeur CHAR en une valeur DATE ou
NUMBER, on utilise respectivement les fonctions TO_DATE
ou TO_NUMBER,
Exemple

DECLARE
v_chr1 CHAR :=‘1’;
v_nbr1 NUMBER;
BEGIN
v_nbr1 := TO_NUMBER(v_chr1);
dbms_output.put_line( ‘TO_NUMBER ( ‘||v_chr1|| ‘) =‘ || v_nbr1 ) ;
END;
64
CONVERSION DE TYPES DE DONNÉES EN PL/SQL
CONVERSION EXPLICITE


Quelques fonctions de conversion

BIN_TO_NUM( bit [,bit[...]] )

Conversion d'une BIN_TO_NUM(1,0,1,0)
 10
suite de bits en
nombre

TO_CHAR( date [, 'format' ] )
TO_CHAR( nombre [, 'format' ] )

Transformation
d'un type DATE
ou NUMBER en
chaîne

TO_CHAR( SYSDATE,
'DD/MM/YYYY
HH24:MI:SS' )
 18/10/2010 00:27:28

TO_DATE( nombre [, 'format' ] )
TO_DATE( chaîne [, 'format' ] )

Transformation
d'un type
NUMBER ou
CHAR ou
VARCHAR2 en
date

TO_DATE( '18/11/2010',
'DD/MM/RR' )
 18/11/10

65
CONVERSION DE TYPES DE DONNÉES EN PL/SQL
CONVERSION IMPLICITE

Quand il est logique, PL/SQL peut implicitement
convertir le type de données d'une valeur.
Exemple 1:


DECLARE
v_chr1 CHAR :=‘1’;
v_nbr1 NUMBER;
BEGIN
v_nbr1 := v_chr1;
dbms_output.put_line( v_nbr1 ) ;
END;

Exemple 2:
DECLARE
v_bl BOOLEAN;
begin
v_bl:=1; -- renvoie une erreur “expression du mauvais type »
end;

66
QUELQUES OPÉRATEURS:
LES OPERATEURS LOGIQUES


Les operateurs logiques AND, OR et NOT suivent la
logique des trois états indiqués dans le tableau cidessous.
AND et OR sont des opérateurs binaires; NOT est un
opérateur unaire.
L’opérateur AND

L’opérateur OR

L’opérateur NOT

TRUE
FALSE
NULL

TRUE
TRUE
FALSE
NULL

FALSE
FALSE
FALSE
FALSE

NULL
NULL
FALSE
NULL

TRUE
FALSE
NULL

TRUE
TRUE
TRUE
TRUE

FALSE
TRUE
FALSE
NULL

NULL
TRUE
NULL
NULL

FALSE
NULL

TRUE
FALSE
TRUE
TRUE

FALSE
TRUE
FALSE
NULL

NULL
NULL
NULL
NULL

67
QUELQUES OPÉRATEURS:
OPÉRATEURS ARITHMÉTIQUES
Operateur

Signification

=

Egal à

<>, !=, ~=, ^=

Non égal à

<

Inférieur à

>

Supérieur à

<=

Inférieur ou égal à

>=

Supérieur ou égal à

68
QUELQUES OPÉRATEURS:
OPÉRATEUR DE CONCATÉNATION


Les double-barres verticales (||) servent comme
opérateur de concaténation entre chaines de caractères

69
EXERCICE:


Ecrire un bloc PL/SQL pour:
Demander de saisir le nom à la console
 Afficher le nombre de caractères du nom saisi
NB:



















Utiliser un fichier
 Pour ouvrir un fichier: ed nom_fichier
 Pour executer un fichier: @nom_fichier ou bien start nom_fichier
Pour afficher un message à la console, utiliser commande SQL*PLUS:
PROMPT « Texte à Afficher »
Pour récupérer ce qui est saisi par l’utilisateur, utiliser la commande
SQL*PLUS:
Accept nom_var
 Pour utiliser la variable nom_var dans un bloc pl/sql: ‘&nom_var’
Utiliser une variable de type NUMBER(38,0) qui va contenir la longueur de
la chaine de caractères
Utiliser la fonction length(chaine) pour calculer la longueur de la chaine
Pour afficher un message à la console utiliser la fonction:
DBMS_OUTPUT.PUT_LINE (texte à afficher)
Pour convertir un chiffre en un caractère, utiliser la fonction TO_CHAR()
L’opérateur de concaténation est: ||
Pour activer l’affichage à la console, utiliser la commande:
70
SET SERVEROUTPUT ON
Pour désactiver l’affichage des vérifications
SET VERIFY OFF


Correction

-- configuration de la console SQL*PLUS
SET SERVEROUTPUT ON
SET VERIFY OFF
PROMPT entrer un nom
ACCEPT var
-- Code PL/SQL
DECLARE
lg number;
BEGIN
lg :=length ('&var');
dbms_output.put_line( 'le nombre de caractères dans '|| '&var' || ' est ' ||
TO_CHAR(lg)) ;
71
END;
/

Contenu connexe

Tendances

Chp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesChp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesLilia Sfaxi
 
Exercice 1 java Héritage
Exercice 1 java HéritageExercice 1 java Héritage
Exercice 1 java HéritageNadaBenLatifa
 
Etude d'une application de gestion d'une bibliothèque numérique
Etude d'une application de gestion d'une bibliothèque numérique Etude d'une application de gestion d'une bibliothèque numérique
Etude d'une application de gestion d'une bibliothèque numérique Georges Amichia
 
Pl/sql - interaction avec la base de données & structures de contrôle
Pl/sql  - interaction avec la base de données & structures de contrôlePl/sql  - interaction avec la base de données & structures de contrôle
Pl/sql - interaction avec la base de données & structures de contrôleAbdelouahed Abdou
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionLilia Sfaxi
 
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...MOHAMMED MOURADI
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-CorrectionLilia Sfaxi
 
Plateforme d’e learning
Plateforme d’e learningPlateforme d’e learning
Plateforme d’e learningEl Aber Haythem
 
Administration Base de données Oracle
Administration Base de données OracleAdministration Base de données Oracle
Administration Base de données OracleAndrianaivo Lovatiana
 
Merise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMerise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMajid CHADAD
 
Les Contraintes | SQL Oracle
Les Contraintes | SQL OracleLes Contraintes | SQL Oracle
Les Contraintes | SQL Oraclewebreaker
 
Cours : les listes chainées Prof. KHALIFA MANSOURI
Cours : les listes chainées  Prof. KHALIFA MANSOURI Cours : les listes chainées  Prof. KHALIFA MANSOURI
Cours : les listes chainées Prof. KHALIFA MANSOURI Mansouri Khalifa
 
UML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouriUML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouriMansouri Khalifa
 
Introduction au génie logiciel
Introduction au génie logicielIntroduction au génie logiciel
Introduction au génie logicielMohamed Diallo
 
Conception et réalisation d'une application de gestion intégrée au sein de la...
Conception et réalisation d'une application de gestion intégrée au sein de la...Conception et réalisation d'une application de gestion intégrée au sein de la...
Conception et réalisation d'une application de gestion intégrée au sein de la...Addi Ait-Mlouk
 

Tendances (20)

Chp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesChp3 - Diagramme de Classes
Chp3 - Diagramme de Classes
 
Exercice 1 java Héritage
Exercice 1 java HéritageExercice 1 java Héritage
Exercice 1 java Héritage
 
Etude d'une application de gestion d'une bibliothèque numérique
Etude d'une application de gestion d'une bibliothèque numérique Etude d'une application de gestion d'une bibliothèque numérique
Etude d'une application de gestion d'une bibliothèque numérique
 
Pl/sql - interaction avec la base de données & structures de contrôle
Pl/sql  - interaction avec la base de données & structures de contrôlePl/sql  - interaction avec la base de données & structures de contrôle
Pl/sql - interaction avec la base de données & structures de contrôle
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de Conception
 
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-Correction
 
Plateforme d’e learning
Plateforme d’e learningPlateforme d’e learning
Plateforme d’e learning
 
Administration Base de données Oracle
Administration Base de données OracleAdministration Base de données Oracle
Administration Base de données Oracle
 
Merise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMerise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigés
 
Tp java ee.pptx
Tp java ee.pptxTp java ee.pptx
Tp java ee.pptx
 
Cours uml
Cours umlCours uml
Cours uml
 
Les Contraintes | SQL Oracle
Les Contraintes | SQL OracleLes Contraintes | SQL Oracle
Les Contraintes | SQL Oracle
 
Cours : les listes chainées Prof. KHALIFA MANSOURI
Cours : les listes chainées  Prof. KHALIFA MANSOURI Cours : les listes chainées  Prof. KHALIFA MANSOURI
Cours : les listes chainées Prof. KHALIFA MANSOURI
 
UML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouriUML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouri
 
Introduction au génie logiciel
Introduction au génie logicielIntroduction au génie logiciel
Introduction au génie logiciel
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Conception et réalisation d'une application de gestion intégrée au sein de la...
Conception et réalisation d'une application de gestion intégrée au sein de la...Conception et réalisation d'une application de gestion intégrée au sein de la...
Conception et réalisation d'une application de gestion intégrée au sein de la...
 
CM processus-unifie
CM processus-unifieCM processus-unifie
CM processus-unifie
 
Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4
 

En vedette

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 CAbdelouahed Abdou
 
Bases de données réparties par la pratique
Bases de données réparties par la pratiqueBases de données réparties par la pratique
Bases de données réparties par la pratiqueAbdelouahed Abdou
 
Bases de données réparties
Bases de données répartiesBases de données réparties
Bases de données répartiesAbdelouahed Abdou
 
Document Object Model ( DOM)
Document Object Model ( DOM)Document Object Model ( DOM)
Document Object Model ( DOM)Abdelouahed Abdou
 
Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Abdelouahed Abdou
 
Introduction au traitement d'images
Introduction au traitement d'imagesIntroduction au traitement d'images
Introduction au traitement d'imagesAbdelouahed Abdou
 
Présentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open Source
Présentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open SourcePrésentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open Source
Présentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open SourceAfrica Performances
 
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...Abdelouahed Abdou
 

En vedette (9)

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
 
Introduction à ASP.NET
Introduction à ASP.NETIntroduction à ASP.NET
Introduction à ASP.NET
 
Bases de données réparties par la pratique
Bases de données réparties par la pratiqueBases de données réparties par la pratique
Bases de données réparties par la pratique
 
Bases de données réparties
Bases de données répartiesBases de données réparties
Bases de données réparties
 
Document Object Model ( DOM)
Document Object Model ( DOM)Document Object Model ( DOM)
Document Object Model ( DOM)
 
Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)Ajax (Asynchronous JavaScript and XML)
Ajax (Asynchronous JavaScript and XML)
 
Introduction au traitement d'images
Introduction au traitement d'imagesIntroduction au traitement d'images
Introduction au traitement d'images
 
Présentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open Source
Présentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open SourcePrésentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open Source
Présentation de OpenERP/Odoo: Progiciel de Gestion Intégré Open Source
 
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
Développement de modules pour odoo (anciennement OpenERP): exemples et exerci...
 

Similaire à Introduction à pl/sql

PLSQL-Complements-4p.pdf
PLSQL-Complements-4p.pdfPLSQL-Complements-4p.pdf
PLSQL-Complements-4p.pdfRihabBENLAMINE
 
Sqloracle
SqloracleSqloracle
Sqloracletedy11
 
Plsql triggers
Plsql triggersPlsql triggers
Plsql triggersAz Za
 
Ce131 g formation-ibm-db2-sql-workshop-for-experienced-users
Ce131 g formation-ibm-db2-sql-workshop-for-experienced-usersCe131 g formation-ibm-db2-sql-workshop-for-experienced-users
Ce131 g formation-ibm-db2-sql-workshop-for-experienced-usersCERTyou Formation
 
1444475541443.pptx
1444475541443.pptx1444475541443.pptx
1444475541443.pptxtirike6016
 
7 Programmation PL-SQL Oracle.pdf
7 Programmation PL-SQL Oracle.pdf7 Programmation PL-SQL Oracle.pdf
7 Programmation PL-SQL Oracle.pdfuser2023moi
 
Certification oracle base de données oracle 11 g
Certification oracle base de données   oracle 11 gCertification oracle base de données   oracle 11 g
Certification oracle base de données oracle 11 gEGILIA Learning
 
Alphorm.com Formation PL/SQL
Alphorm.com Formation PL/SQLAlphorm.com Formation PL/SQL
Alphorm.com Formation PL/SQLAlphorm
 
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éessmiste
 
Presentation du SGBD Oracle DATABASE.pptx
Presentation du SGBD Oracle DATABASE.pptxPresentation du SGBD Oracle DATABASE.pptx
Presentation du SGBD Oracle DATABASE.pptxPriscilleGANKIA
 
Plsql
PlsqlPlsql
PlsqlAz Za
 
0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdf0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdfRihabBENLAMINE
 
A SIMPLIFIED APPROACH FOR QUALITY.pdf
A SIMPLIFIED APPROACH FOR QUALITY.pdfA SIMPLIFIED APPROACH FOR QUALITY.pdf
A SIMPLIFIED APPROACH FOR QUALITY.pdfBabacarDIOP48
 
Sql azure performance et montee en charge (1)
Sql azure   performance et montee en charge (1)Sql azure   performance et montee en charge (1)
Sql azure performance et montee en charge (1)Aymeric Weinbach
 

Similaire à Introduction à pl/sql (20)

Les02.ppt
Les02.pptLes02.ppt
Les02.ppt
 
PLSQL-Complements-4p.pdf
PLSQL-Complements-4p.pdfPLSQL-Complements-4p.pdf
PLSQL-Complements-4p.pdf
 
Sqloracle
SqloracleSqloracle
Sqloracle
 
Plsql triggers
Plsql triggersPlsql triggers
Plsql triggers
 
Intro.ppt
Intro.pptIntro.ppt
Intro.ppt
 
Ce131 g formation-ibm-db2-sql-workshop-for-experienced-users
Ce131 g formation-ibm-db2-sql-workshop-for-experienced-usersCe131 g formation-ibm-db2-sql-workshop-for-experienced-users
Ce131 g formation-ibm-db2-sql-workshop-for-experienced-users
 
1444475541443.pptx
1444475541443.pptx1444475541443.pptx
1444475541443.pptx
 
7 Programmation PL-SQL Oracle.pdf
7 Programmation PL-SQL Oracle.pdf7 Programmation PL-SQL Oracle.pdf
7 Programmation PL-SQL Oracle.pdf
 
Certification oracle base de données oracle 11 g
Certification oracle base de données   oracle 11 gCertification oracle base de données   oracle 11 g
Certification oracle base de données oracle 11 g
 
Alphorm.com Formation PL/SQL
Alphorm.com Formation PL/SQLAlphorm.com Formation PL/SQL
Alphorm.com Formation PL/SQL
 
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
 
Presentation du SGBD Oracle DATABASE.pptx
Presentation du SGBD Oracle DATABASE.pptxPresentation du SGBD Oracle DATABASE.pptx
Presentation du SGBD Oracle DATABASE.pptx
 
Les03.ppt
Les03.pptLes03.ppt
Les03.ppt
 
C#
C#C#
C#
 
Les08.ppt
Les08.pptLes08.ppt
Les08.ppt
 
Plsql
PlsqlPlsql
Plsql
 
Les01.ppt
Les01.pptLes01.ppt
Les01.ppt
 
0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdf0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdf
 
A SIMPLIFIED APPROACH FOR QUALITY.pdf
A SIMPLIFIED APPROACH FOR QUALITY.pdfA SIMPLIFIED APPROACH FOR QUALITY.pdf
A SIMPLIFIED APPROACH FOR QUALITY.pdf
 
Sql azure performance et montee en charge (1)
Sql azure   performance et montee en charge (1)Sql azure   performance et montee en charge (1)
Sql azure performance et montee en charge (1)
 

Dernier

MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdfMICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdfssuser40e112
 
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptMécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptssusercbaa22
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptxMalikaIdseaid1
 
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...M2i Formation
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.Franck Apolis
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipM2i Formation
 
présentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteurprésentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteurdinaelchaine
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptxSAID MASHATE
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.Txaruka
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprisesMajdaKtiri2
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxssusercbaa22
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptxTxaruka
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...Faga1939
 
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxssuserbd075f
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film françaisTxaruka
 
Présentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxPrésentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxpopzair
 
Cours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxCours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxlamourfrantz
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptssusercbaa22
 

Dernier (20)

MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdfMICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
 
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptMécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptx
 
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadership
 
présentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteurprésentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteur
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptx
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
 
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 
Pâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie PelletierPâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie Pelletier
 
Présentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxPrésentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptx
 
Cours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxCours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptx
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.ppt
 

Introduction à pl/sql

  • 1. INTRODUCTION À LA PROGRAMMATION PL/SQL Abdelouahed Sabri abdelouahed.sabri@gmail.com 1
  • 2. PLAN Introduction,  Avantages de PL/SQL,  Les principales caractéristiques du PL / SQL,  Les variables et constantes,  Les structures de contrôle  Interaction avec la base de données à partir de PL/SQL  Les sous programmes PL/SQL   Déclencheurs (Triggers) 2
  • 3. BIBLIOGRAPHIE Christian Soutou « SQL pour Oracle »  Gilles Briard « Oracle10g sous Windows »  John Russell « PL_SQL Reference User guide 10g Release »  Denis Roegel « Le langage procédural PL/SQL »  SheikYerbouti « Oracle PL/SQL »  3
  • 4. PRÉ-REQUIS POUR CE COURS Des connaissances dans le Structured Query Language SQL,  des connaissances de base dans la programmation (IF-THEN comparaisons, boucles, …)  Des connaissances dans le SGBD Oracle,  4
  • 5. INTRODUCTION PL/SQL (Procedural Language / SQL), l’extension procédurale proposée par Oracle pour SQL (L4G),  Il permet de combiner des requêtes SQL (SELECT, INSERT, UPDATE et DELETE) et des instructions procédurales (boucles, conditions...),   Créer des traitements complexes destinés à être stockés sur le serveur de base de données (objets serveur),  Comme on le sait, les structures de contrôle habituelles d’un langage (IF, WHILE…) ne font pas partie intégrante de la norme SQL. Oracle les prend en compte dans PL/SQL. 5
  • 6. AVANTAGES DE PL/SQL 1/2  Ce langage propose des-performances pour le traitement des transactions et offre les avantages suivants:    Intégration complète du SQL, Prise en charge de la programmation orientée objet (surcharge), Parfaite Intégration avec Oracle et Java, en fait PL/SQL est un langage propriétaire de Oracle,  On peut lancer des sous-programme Pl/SQL à partir de Java et de même, on peut appeler des procédures Java à partir d’un block Pl/SQL  6
  • 7. AVANTAGES DE PL/SQL 2/2  Portabilité totale : Toutes les bases de données Oracle comportent un moteur d’exécution PL/SQL. les programmes PL/SQL sont indépendants du système d’exploitation qui héberge le serveur Oracle. En changeant de système, les applicatifs n’ont pas à être modifiés.  Facilité de programmation : PL/SQL est un langage simple d’apprentissage et de mise en œuvre. Sa syntaxe claire offre une grande lisibilité en phase de maintenance de vos applications. De nombreux outils de développement, autres que ceux d’Oracle 10g, autorisent la programmation en PL/SQL dans la base de données. 7
  • 8. AVANTAGES DE PL/SQL EXEMPLE D’INTÉGRATION ENTRE PL/SQL ET SQL  Vous n'avez pas à traduire les types de données entre SQL et PL/SQL:  On retrouvera avec PL/SQL tous les types de données et instructions disponibles sous SQL, et des mécanismes pour parcourir des résultats de requêtes (curseurs), pour traiter des erreurs (exceptions), pour manipuler des données complexes (paquetages DBMS_xxx) et pour programmer des transactions « COMMIT, ROLLBACK, SAVEPOINT »  Cette intégration nous permet d'économiser à la fois le temps d'apprentissage et le temps d’exécution. Les fonctionnalités du langage PL/SQL nous permettent de travailler avec des colonnes et des lignes des tables sans préciser les types de données, ce qui nous permet d’économiser du temps d'entretien lorsque la définition des tables change. 8
  • 9. AVANTAGES DE PL/SQL PL/SQL PROPOSE UNE BONNE PERFORMANCE  Dans PL/SQL, ce ne sont plus des requêtes SQL qui sont transmis un à un au moteur de base de données, mais des blocs et des sous-programmes, Alors: Le traitement des données est donc interne à la base, ce qui réduit considérablement le trafic entre celle-ci et l’application,  Il est préférable de travailler avec un bloc PL/SQL plutôt qu’avec une suite d’instructions SQL susceptibles d’encombrer le trafic réseau  9
  • 10. AVANTAGES DE PL/SQL PL/SQL PROPOSE UNE BONNE PERFORMANCE  Dans un environnement clientserveur, chaque instruction SQL donne lieu à l’envoi d’un message du client vers le serveur suivi de la réponse du serveur vers le client.  Un bloc PL/SQL donne lieu à un seul échange sur le réseau entre le client et le serveur. Les résultats intermédiaires sont traités côté serveur et seul le résultat final est retourné au client 10
  • 11. LES PRINCIPALES CARACTÉRISTIQUES DU PL/SQL  PL/SQL combine la puissance de manipulation de données d’SQL avec la puissance de traitement des langages procédurales:    Vous pouvez contrôler le déroulement du programme avec des déclarations comme IF et LOOP Vous pouvez déclarer des variables, définir des procédures et fonctions et faire la gestion des différentes exceptions, PL/SQL vous permet de décomposer des problèmes complexes en compréhensible code (ou procédures), et permet l’utilisation de ce code dans plusieurs applications. 11
  • 12. LES PRINCIPALES CARACTÉRISTIQUES DU PL/SQL  La figure suivante présente la façon avec laquelle le moteur PL/QL traite un bloc PL/SQL anonyme.  Le moteur PL/SQL exécute des instructions procédurales, mais envoi des instructions au moteur SQL dans la base de données Oracle. 12
  • 13. STRUCTURE D’UN PROGRAMME PL/SQL PL/SQL est un langage structuré en blocs, constitués d'un ensemble d'instructions,  Un bloc PL/SQL peut être "externe", on dit alors qu'il est anonyme, ou alors stocké dans la base de données sous forme de procédure, fonction ou trigger (on lui affecte un nom),  Un bloc PL / SQL contient trois parties :  une partie déclarative, 2. une partie exécutable, 3. une partie pour la gestion des exceptions. NB: Seule la partie exécutable est nécessaire. 1. 13
  • 14. STRUCTURE D’UN PROGRAMME PL/SQL  La première partie d’un code est la partie déclarative: Définition des types, variables curseurs, exceptions, etc.  Ces éléments sont manipulés dans la partie exécutable.  Le nom réservé est DECLARE. NB: Cette section est optionnelle.   La deuxième partie est la partie exécutable: Contient le code PL/SQL incluant ou non des directives SQL.  Cette partie de code débute par le mot réservé BEGIN et se termine par le mot réservé END; (ne pas oublier le pointvirgule). NB: Cette section est obligatoire.   La troisième section est la partie de gestion des exceptions. Cette partie débute par le mot réservé EXCEPTION.  Elle permet de traiter les erreurs retournées par le SGBD à la suite d’exécutions d’instructions SQL. NB: Cette partie est optionnelle.  14
  • 15. STRUCTURE D’UN PROGRAMME PL/SQL  Un bloc peut être imbriqué dans le code d’un autre bloc (on parle de sous-bloc).   NB: Un sous-bloc commence par BEGIN et se termine par END; La portée d’un objet (variable, type, curseur, exception, etc.) est la zone du programme qui peut y accéder 15 NB: Un sous-bloc peut aussi se trouver dans la partie des exceptions
  • 16. LE JEU DE CARACTÈRES EN PL/SQL  Les caractères qui sont interprétés par PL/SQL, comme SQL, sont :    Les alphanumérique : lettres A à Z et a à z ; chiffres de 0 à 9 Les symboles ( ) + - * / < > = ! ~ ^ ; : . ' @ % , " # $ & _ | { } ? [ ] Les caractères spéciaux comme : tabulations, espaces et retours-chariot NB: PL/SQL n’est pas sensible à la casse Tva=TVA 16
  • 17. LE JEU DE CARACTÈRES EN PL/SQL  Pour une meilleure lisibilité, on peut séparer les unités lexicales par des espaces, des tabulations et des retours à la ligne. Code lisible Code (correct) peu lisible … IF x>y THEN max:=x;ELSE max:=y;END IF; … IF x > y THEN max := x; ELSE max := y; END IF; … 17
  • 18. LES IDENTIFIANTS  Avant de parler des différents types de variables PL/SQL, décrivons comment il est possible de nommer des objets PL/SQL (variables, curseurs, exceptions, etc.).  Un identificateur commence par une lettre suivie (optionnel) de symboles (lettres, chiffres, $, _, #).   Certains symboles sont interdits: &, -, /, +, : Un identificateur peut contenir jusqu’à trente caractères. Identifiants autorisés A AA2 TVA# Hors_Taxe Requéte$Sql Identifiants non autorisés A&A (symbole &) 2A (debut chiffre) Hors-Taxe (symbole -) Vrai/Faux (symbole /) Requéte Sql (symbole espace) 18
  • 19. LES COMMENTAIRES  PL/SQL supporte deux types de commentaires : 1. 2. Mono-lignes; commençant au symbole -- et finissant à la fin de la ligne, Multi-lignes; commençant par /* et finissant par */ BEGIN … -- Lecture du nom d’un utilisateur utilisant son ID SELECT nom INTO v_nom FROM T_USER WHERE id=5; /* Ecriture dans la table Log pour spécifier quel utilisateur est connecté à l’application en spécifiant: 1- le nom 2-l’heure et la date */ 19 INSERT INTO log VALUES (v_nom, v_heure, v_date); … END;
  • 20. LES MOTS RÉSERVÉS  Certains identifiants, appelés mots réservés, ont une signification syntaxiques particulière dans PL/SQL.  Par exemple, les mots BEGIN et END sont réservés. Une redéfinition d’un mot réservé provoque une erreur de compilation  Souvent, les mots réservés sont écrits en majuscules pour une meilleure lisibilité  20
  • 21. EXÉCUTION D’UN PROGRAMME PL/SQL  Pour exécuter un programme PL/SQL, l’outil le plus simple livré par Oracle est SQL*Plus:  Cet outil permet: D’accéder à l’ensemble des fonctionnalités d’Oracle (10g) à partir d’une interface textuelle identique (Console), quel que soit le système d’exploitation utilisé  D’exécuter de façon interactive des ordres SQL unitaires,  De lancer des fichiers contenant un ensemble d’ordres SQL.  21
  • 22. EXÉCUTION D’UN PROGRAMME PL/SQL INTERFACES SQL*PLUS  Il existe plusieurs interfaces SQL*Plus Sous Windows :    En mode ligne de commande (qui ressemble à une fenêtre DOS ou telnet) Avec une interface graphique SQL*Plus Worksheet de l’outil Enterprise Manager Avec le navigateur via l’interface Web iSQL*Plus (i comme « Internet »:   Cette interface s’apparente assez à celle de EasyPHP en étant très intuitive). NB : Les interfaces graphiques SQL*Plus et iSQL*Plus ne sont plus offertes depuis la version 11g. L’interface en mode ligne de commande reste toutefois disponible pour toutes les versions.  Pour cela on va s’intéresser à SQL*Plus en mode ligne de commande. 22 
  • 23. EXÉCUTION D’UN PROGRAMME PL/SQL INTERFACES SQL*PLUS  Pour lancer SQL*Plus, tapez dans une fenêtre Console DOS (bien sur on suppose que Oracle (10g) est installé): C:> sqlplus  Il y’a deux modes de connexions:   Mode utilisation simple de la base de données, Mode avec privilèges pour administration.  Le privilège SYSOPER: permet à un administrateur de la base de données d’exécuter: STARTUP, SHUTDOWN, ALTER DATABASE OPEN/MOUNT, ALTER DATABASE BACKUP, ARCHIVE LOG, and RECOVER  Le privilège SYSDBA: contient tout les privilèges y compris ADMIN OTPION et SYSOPER 23
  • 24. EXÉCUTION D’UN PROGRAMME PL/SQL INTERFACES SQL*PLUS  Pour se connecter en mode administration, dans la fenêtre Console DOS on tape : # Connexion avec un utilisateur ayant reçu le privilège SYSDBA connect utilisateur/passwd as SYSDBA. # connexion avec un utilisateur ayant reçu le privilège SYSOPER connect utilisateur/passwd as SYSOPER 24
  • 25. EXÉCUTION D’UN PROGRAMME PL/SQL INTERFACES SQL*PLUS  On peut aussi saisir des options lors du lancement de SQL*Plus : C:> sqlplus -S utilisateur/mot_de_passe@base_cible @fichier_sql    -S pour spécifier que c’est un mode « silencieux » l’utilisateur et le mot de passe peuvent être suivis de l’alias Oracle Net de la base cible à laquelle vous souhaitez vous connecter. Dans ce cas, le signe @ est accolé au mot de passe un fichier de commande contenant des ordres SQL, des commandes SQL*Plus et PL/ SQL peut être automatiquement lancé, un espace doit alors précéder le signe @ 25
  • 26. EXÉCUTION D’UN PROGRAMME PL/SQL INTERFACES SQL*PLUS  Quelques commandes utiles:  HOST pour lancer des commandes OS à partir de la session SQL*Plus,:   Pour lister le contenu d’un répertoire : HOST DIR NB: Celle-ci ne termine pas votre session SQL*Plus  DISC (DISCONNECT) pour se déconnecter de la base Oracle cible  EXIT ou QUIT pour se déconnecter et terminer une session SQL*Plus LIST ou L permet de visualiser la dernière commande SQL saisie RUN ou R exécute l’ordre SQL présent dans le buffer   NB: Un bloc d’instructions PL/SQL doit se terminer par une 26 « / ».
  • 27. EXÉCUTION D’UN PROGRAMME PL/SQL INTERFACES SQL*PLUS  Quelques commandes utiles:  ED (EDIT) permet d’appeler l’éditeur de texte et y place l’ordre SQL présent dans le buffer courant.  Pour préciser l’éditeur de texte de votre choix (ici notepad), utilisez la commande SQL*Plus ; SQL> def _editor = notepad ed mon_fichier.sql # si le fichier n’existe pas, il sera crée  Pour exécuter un fichier de commande à partir de SQL*Plus start mon_fichier.sql -- ou bien @mon_fichier.sql 27
  • 28. EXÉCUTION D’UN PROGRAMME PL/SQL INTERFACES SQL*PLUS  Quelques commandes utiles:  SET TIMING ON|OFF permet de mesurer la durée d’exécution de vos ordres SQL (en millisecondes).  SET SERVEROUTPUT ON|OFF Permet d’activer ou de désactiver l’affichage à la console  PROMPT ‘Texte à afficher à la console’   ACCEPT nom_var   Permet de récupérer une valeur saisie par l’utilisateur et de la stocker dans nom_var. pour l’utiliser dans un bloc Pl/SQL on utilise ‘&nom_var’ VARIABLE nom_var TYPE    Permet d’afficher un texte à la console Déclarer une variable globale on précisant son type Pour l’utiliser en PL/SQL on utilise :nom_var PRINT var  Afficher le contenu de var 28
  • 29. EXÉCUTION D’UN PROGRAMME PL/SQL EXEMPLE  Exemple: Créer un nouvel utilisateur.  Nb: On se connecte sous le compte SYSTEM (le mot de passe SYSTEM est saisi lors de l’installation d’oracle). connect SYSTEM/pass as SYSDBA -- sous l’utilisateur SYSTEM create user SIRM identified by SIRMpass; -- Se connecter sous SIRM Connect SIRM/SIRMpass as sysdba -- executer un script start ORACLE_HOMERDBMSADMINSCRIPT.SQL -- Afficher le nom de l’utilisateur courant show user 29
  • 30. LES VARIABLES ET CONSTANTES  PL / SQL permet de déclarer des constantes (valeur invariable) et des variables pour les utiliser dans des programme SQL.  Il faut déclarer une constante ou variable avant de la référencer.  Déclaration:   Les variables et les constantes sont déclarées éventuellement initialisées) dans la section DECLARE. (et La syntaxe: nom_de_la_variable [CONSTANT] TYPE_DE_DONNEE [NOT NULL] [:= | DEFAULT expression]; En plus des types de données propre à PL/SQL comme BOOLEAN30 ou PLS_INTEGER, Les variables peuvent avoir n'importe quel type SQL comme CHAR, DATE, ou NUMBER.
  • 31. LES VARIABLES ET CONSTANTES DÉCLARATION:  Exemple:     Déclarer une variable nommée v_telephone qui va contenir 10 chiffres (Type NUMBER (10)) Déclarer une variable nommée v_disponible pour contenir une valeur booléenne (BOOLEAN) TRUE ou FALSE. Déclarer une variable v_TVA de type NUMBER et l’initialiser par 0.02 La syntaxe pour déclarer une variable est la suivante: nom_de_la_variable [CONSTANT] TYPE_DE_DONNEE [NOT NULL] [:= | DEFAULT expression]; DECLARE v_telephone NUMBER(10); v_disponible BOOLEAN; v_TVA NUMBER :=0.02; 31
  • 32. LES VARIABLES ET CONSTANTES DÉCLARATION:  Les constantes: Pour la déclaration des constantes on utilise le mot réservé CONSTANT nom_de_la_variable [CONSTANT] TYPE_DE_DONNEE [NOT NULL] [:= | DEFAULT expression]; NB: Il faut initialiser les constantes lors de leur déclaration.  Exemple: DECLARE c_TVA CONSTANT NUMBER :=0.02; … BEGIN … END 32
  • 33. LES VARIABLES ET CONSTANTES DÉCLARATION:  La portée d'une variable: Est la région d'une unité de programme (bloc ou sousprogramme) à partir duquel on peut faire référence à cet identifiant.   Les identifiants (variables) qui sont déclarés dans un bloc PL/SQL sont considérés comme locaux à ce bloc et globaux à ces sous-blocs. Bien qu’on ne puisse pas déclarer un identifiant deux fois dans le même bloc, on peut déclarer le même identifiant dans deux blocs différents.   Les deux éléments (variables) représentés par l'identifiant sont distincts, et tout changement dans l'un n'affecte pas l'autre. Un bloc ne peut pas faire référence à identifiants qui est déclaré dans l’autre bloc parce que ces identifiants ne sont33 ni locaux ni globaux au bloc.
  • 34. LES VARIABLES ET CONSTANTES AFFECTATION: L’affectation d’une valeur à une variable est effectuée en PL/SQL en utilisant l’operateur « := »  L’affectation peut être effectuée dans la partie déclaration comme dans la partie exécutable;  DECLARE nom_de_la_variable TYPE_DE_DONNEE [NOT NULL] [:= | DEFAULT expression]; -- ou bien BEGIN nom_de_la_variable := valeur; … END ; 34
  • 35. LES VARIABLES ET CONSTANTES AFFECTATION:  Exemple: DECLARE v_telephone NUMBER(10); v_disponible BOOLEAN; v_DateDeNaissance Date; c_TVA CONSTANT NUMBER :=0.02; v_TTC NUMBER ; v_HT NUMBER ; BEGIN v_disponible :=TRUE ; v_telephone :=0666666666; v_TTC := v_HT + c_TVA ; END; / 35
  • 36. LES VARIABLES ET CONSTANTES AFFECTATION:  Une autre façon pour affecter à une variable une valeur est d’utiliser la directive DEFAULT. v_pays CHAR(5) := ’MAROC’ ; /* Équivaut à v_pays CHAR(5) DEFAULT 'MAROC'; */  La troisième façon pour attribuer des valeurs à une variable consiste à sélectionner (ou récupérer) des valeurs de la base de données:  Dans l'exemple ci-dessous, nous allons récupérer le nom d’un employé dont ID=10 et l’enregistrer dans la variable v_nom. BEGIN SELECT nom INTO v_nom FROM T_EMPLOYE WHERE ID=10;  Il existe d’autres façons pour affecter à une variable une valeur 36
  • 37. LES VARIABLES ET CONSTANTES AFFECTATION:     NB1 : La contrainte NOT NULL doit être suivie d’une clause d’initialisation. NB2 : À l’inverse de la plupart des langages de programmation, les déclarations multiples ne sont pas permises. NB3 : Par défaut, les variables sont initialisées à la valeur NULL NB4: Seules les valeurs TRUE, FALSE et NULL peuvent être affectée à une variable booléenne.. 37
  • 38. LES VARIABLES ET CONSTANTES  EXEMPE: DECLARE -- Déclarations de variables. v_nom VARCHAR2(7); v_alias VARCHAR2(7); v_age NUMBER(2); v_naissance DATE; v_existant BOOLEAN NOT NULL DEFAULT FALSE; BEGIN v_nom := 'Mohamed'; -- Affectation d’une chaîne de caractères. v_alias:= v_nom; -- Affectation d’une variable. v_age:= 23; --Affectation d’un nombre. v_naissance := '01-01-2000'; -- Affectation de dates. v_existant := TRUE; -- Affectation d’un booléen. /*Affectation d’une chaîne de caractères par une requête.*/ SELECT nom INTO v_nom FROM T_User WHERE age= 21; END; 38
  • 39. LES TYPES DE DONNÉES   En plus des types de données propre à PL/SQL, on peut utiliser tous les types de données SQL (NUMBER, CHAR, BOOLEAN, VARCHAR2, DATE, TIMESTAMP, INTERVAL, BLOB, ROWID…) On peut distinguer:     Type scalaire: n'a pas de composants internes. Il contient une valeur singulière, comme un nombre ou une chaîne de caractères. Type composé: a des composants internes qui peuvent être manipulés individuellement, telles que les éléments d'un tableau. Type référence: contient les valeurs, appelées pointeurs, qui désignent d’autres éléments du programme. Type LOB (Large Object Binary): est un type de données ORACLE permettant de stocker des données de grande taille allant jusqu’à 39 4 Go, tels que des blocs de texte ou des images graphiques.
  • 40. LES TYPES DE DONNÉES  Les types scalaires sont répartis en quatre familles, ou on trouve les numéros, caractères, booléens, et les données date/heure. 40
  • 41. LES TYPES DE DONNÉES TYPES SCALAIRES  Le type scalaire permet de stocker des données numériques (entiers, nombres réels, et nombres à virgule flottante), représenter des quantités et de faire des calculs.      BINARY_INTEGER, PLS_INTEGER, BINARY_FLOAT, BINARY_DOUBLE, NUMBER. 41
  • 42. LES TYPES DE DONNÉES TYPES SCALAIRES  NUMBER On utilise le type de données NUMBER pour stocker des numéros à virgule fixe ou à virgule flottante. Le domaine des valeurs sont de1E-130 à 10E125.  La précision est le nombre de chiffres à droite de la virgule. La syntaxe est la suivante :  NUMBER[(precision[,scale])] -- scale max = 38, la valeur par défaut est 38  Exemple: v_note NUMBER(2,1) :=10.5; v_note NUMBER:=9.05; v_note NUMBER (2):=10; – même que la déclaration NUMBER(2,0) 43
  • 43. LES TYPES DE DONNÉES LES TYPES CARACTÈRE ET CHAINE DE CARACTÈRES  Les types de données caractères permettent de stocker des données alphanumériques, représenter des mots et du texte, et de manipuler des chaînes de caractères.    CHAR VARCHAR2 … 44
  • 44. LES TYPES DE DONNÉES LES TYPES CARACTÈRE ET CHAINE DE CARACTÈRES  CHAR  Le type de données CHAR est utilisé pour stocker des caractères (de longueur fixe), CHAR[(max_size )] – max_size comprise entre 1 et 32767 (par défaut égale à 1).  Exemple v_char CHAR :='A'; v_string CHAR(5) :='SALAM'; 45
  • 45. LES TYPES DE DONNÉES LES TYPES CARACTÈRE ET CHAINE DE CARACTÈRES  VARCAHR2:   Le type de données VARCHAR2 est utilisé pour stocker les données de type chaine de caractères Le type de données VARCHAR2 prend un paramètre obligatoire qui spécifie une taille maximale qui peut aller de 1 à 32767 octets VARCHAR2(maximum_size); NB: on ne peut pas insérer des valeurs VARCHAR2 plus grandes que 4000 octets dans une colonne de type VARCHAR2 d’une base de données. 46
  • 46. LES TYPES DE DONNÉES TYPES POUR LES GRANDS OBJETS (LOB LARGE OBJECT) Les types de données LOB (large object) permettent de stocker jusqu'à quatre giga-octets, en taille, de blocs de données non structurées (comme des textes, images graphiques, clips vidéo et des signaux sonores).  Et, ils permettent un accès par morceaux efficace, et non séquentiel, aux données.     BFILE: utilisé pour stocker de grands objets binaires dans des fichiers systèmes BLOB: utilisé pour stocker de grands objets binaires dans la base de données CLOB: utilisé pour stocker de grands blocs de données de types caractères dans la base de données 47
  • 47. LES TYPES DE DONNÉES LES TYPES BOOLÉENS  PL/SQL propose un type pour représenter des valeurs booléennes (vrai et faux).  Le type de données BOOLEAN peut être utilisé pour stocker les valeurs logiques VRAI, FAUX, et NULL.  Du fait que SQL ne dispose pas d'un type équivalent, on ne peut utiliser des variables booléennes que dans des contextes PL/SQL, mais pas à l'intérieur des requêtes SQL. 48
  • 48. LES TYPES DE DONNÉES LES TYPES DATE ET TIMESTAMP  DATE:  Utilisé pour stocker des variables datetimes de longueur fixe, qui inclut le moment de la journée en secondes depuis minuit. Par défaut, la valeur du jour est le premier jour du mois en cours, la valeur de l’heure égale à minuit,  Sous oracle, la fonction date SYSDATE renvoie la date et l'heure courante.  49
  • 49. LES TYPES DE DONNÉES LES TYPES DATE ET TIMESTAMP  DATE:  PL/SQL propose des fonctions pour la manipulation des dates Nom de la fonction Description ADD_MONTHS (date, nbre_de_moi) Ajoute un nombre spécifié de mois à une date. Retourne le dernier jour du mois de la date spécifiée. LAST_DAY ( date ) MONTHS_BETWEEN ( date2, date1 ) Calcule le nombre de mois entre deux dates. NEXT_DAY( date, 'jour' ) Date du prochain jour après date où jour est un jour de la semaine 50
  • 50. LES TYPES DE DONNÉES LES TYPES DATE ET TIMESTAMP  DATE:  Exemples DECLARE v_date DATE :='01-10-2010'; BEGIN DBMS_OUTPUT.PUT_LINE(ADD_MONTHS(v_date,3)); -- 01/01/11 DBMS_OUTPUT.PUT_LINE(LAST_DAY(v_date)); -- 31/10/10 DBMS_OUTPUT.PUT_LINE(MONTHS_BETWEEN(v_date, ADD_MONTHS(v_date,-2))); -- 2 DBMS_OUTPUT.PUT_LINE(NEXT_DAY(v_date, 'Lundi')); -- 04/10/10 End; /  On peut tester ces fonctions directement en utilisant la table system dual: 51  SELECT SYSDATE from dual;  SELECT NEXT_DAY( '31/12/2013', 'Lundi' ) from dual ;
  • 51. LES TYPES DE DONNÉES LES SOUS-TYPES Un sous-type n’introduit pas un nouveau type mais en restreint (limite) un existant.  PL/SQL propose plusieurs sous-types prédéfinis et il est possible de définir des sous-types personnalisés Sous-type Type restreint Caractéristiques CHARACTER CHAR Mêmes caractéristiques. INTEGER NUMBER(38,0) Entiers. BINARY_INTEGER NUMBER …. NATURAL, POSITIVE NATURALN, POSITIVEN Non négatif. BINARY_INTEGER SIGNTYPE DEC, DECIMAL, NUMERIC Non négatif et non nul. Domaine de valeurs {–1, 0, 1}. NUMBER Décimaux, précision de 38 chiffres. 52
  • 52. LES TYPES DE DONNÉES PERSONNALISER UN TYPE  Il est possible de définir un sous-type (dit «personnalisé» car n’existe que durant le programme) par la syntaxe suivante : SUBTYPE nomSousType IS typeBase[(contrainte)] [NOT NULL];   typeBase est un type prédéfini ou personnalisé. contrainte s’applique au type de base et concerne seulement la précision ou la taille maximale. DECLARE SUBTYPE dateNaiss_sty IS DATE NOT NULL; SUBTYPE insee_sty IS NUMBER(13); SUBTYPE nombre_sty IS NUMBER(2,2); 53
  • 53. LES TYPES DE DONNÉES TYPES DÉRIVÉS  Pour faciliter la maintenance du code qui interagit avec la base de données, on peut également utiliser des types qui sont dérivés de la base sans à les connaitre. Ainsi, on peut utiliser les deux attribues:   %TYPE, %ROWTYPE 54
  • 54. LES TYPES DE DONNÉES TYPES DÉRIVÉS  %TYPE  L’attribut %TYPE fait référence à un type existant qui est soit une colonne d'une table soit un type défini précédemment.  Il fournit le type de données d'une variable ou une colonne de base de données.  Cela est particulièrement utile lorsqu’on déclare des variables qui vont contenir des valeurs de la base de données. 55
  • 55. LES TYPES DE DONNÉES TYPES DÉRIVÉS  %TYPE  Exemple: DECLARE v_adresse T_utilisateurs.adresses%TYPE;  Déclarant v_adresse avec %TYPE a deux avantages. 1. On n’est pas obligé de savoir exactement le type de données du champ adresses de la table T_utilisateurs 2. Si on modifie la définition du champ adresses dans la table T_utilisateurs (changer la taille ou le type) de la base de données, le type de la variable v_adresse va changer au moment de l'exécution. 56
  • 56. LES TYPES DE DONNÉES TYPES DÉRIVÉS  %ROWTYPE  L'attribut %ROWTYPE fournit un type d'enregistrement qui représente une ligne dans une table. L’enregistrement peut stocker une ligne entière sélectionnée à partir d’une table ou récupérée à partir d'un curseur ou variable de curseur. Les éléments de cet enregistrement correspondants portent le même nom et type de données. 57
  • 57. LES TYPES DE DONNÉES TYPES DÉRIVÉS  %ROWTYPE DECLARE rty_utilisateurs T_utilisateur%ROWTYPE; -- on déclare une variable type enregistrement    Ici, nous avons déclaré un enregistrement nommé rty_utilisateurs. Les champs de cet enregistrement ont les mêmes noms et types de données que les colonnes dans la table T_utilisateur. L’enregistrement peut contenir toutes les colonnes d’une table ou seulement certaines. Nous détaillerons, dans la suite, le mécanisme des curseurs (CURSOR) qui emploient beaucoup cette directive. Pour accéder à un champ on utilise la notation du « point » comme sur l’exemple suivant: 58 v_ID :=rty_utilisateurs.ID ; -- ID est le nom d’un champ dans la table T_utilisateur
  • 58. LES TYPES DE DONNÉES TYPES DÉRIVÉS  %ROWTYPE  Exemple: DECALRE rty_utilisateurs T_utilisateur%ROWTYPE; -- on déclare une variable type enregistrement v_ID T_utilisateur.ID%TYPE ; BEGIN SELECT * INTO rty_utilisateurs FROM T_utilisateur where ID=5 ; v_ID :=rty_utilisateurs.ID; rty_utilisateurs.Nom := Tarik ; rty_utilisateurs.Prénom := Ilias ; -- Insertion dans la table T_utilisateur à partir d’un enregistrement. INSERT INTO T_utilisateur VALUES rty_utilisateurs ; END ; NB: Les colonnes récupérées par la directive %ROWTYPE n’héritent pas des contraintes NOT NULL qui seraient éventuellement déclarées au niveau de la table. 59
  • 59. LES TYPES DE DONNÉES TYPES COMPOSÉS  RECORD  Le type de données RECORD (disponible depuis la version 7) définit nos propres structures de données (l’équivalent du struct en C).  La syntaxe pour déclarer une variable de type RECORD est la suivante : TYPE nomRecord IS RECORD ( nomChamp typeDonnées [[NOT NULL] {:= | DEFAULT} expression] [,nomChamp typeDonnées… ]… ); 60
  • 60. LES TYPES DE DONNÉES TYPES COMPOSÉS  RECORD  Exemple: DECLARE /* Déclaration d’un RECORD contenant 3 champs, dont un est non nul avec initialisation du champ qtyInStock */ TYPE R_product IS RECORD (id NUMBER, identifiant CHAR(15) NOT NULL, qtyInStock NUMBER := 50); r_produit R_product; BEGIN -- Affectation d’un record r_produit.id:=5; r_produit.identifiant :=’Lait’ ; r_produit.qtyInStock :=150 ; 61 END;
  • 61. LES TYPES DE DONNÉES TYPES COMPOSÉS  RECORD:   NB1: Les types RECORD ne peuvent pas être stockés dans une table de la base de données. NB2: Il est possible qu’un champ d’un RECORD soit luimême un RECORD (nested record), ou soit déclaré avec les directives %TYPE ou %ROWTYPE. TYPE R_product IS RECORD (id NUMBER, identifiant CHAR(15) NOT NULL, qtyInStock NUMBER := 50); TYPE R_stock IS RECORD (produit R_product, fournisseur T_ fournisseur%ROWTYPE, employe T_employe.id%TYPE) ; 62 NB : Les RECORD ne peuvent pas être comparés (nullité, égalité et inégalité).
  • 62. CONVERSION DE TYPES DE DONNÉES EN PL/SQL  Parfois, il est nécessaire de convertir une valeur d'un type de données à un autre. Par exemple, pour utiliser une date dans un rapport, il faut la convertir en une chaîne de caractères.  PL/SQL supporte à la fois la conversion explicite et implicite (automatique) de types de données.  Il est préférable d’utiliser la conversion explicite pour s’assurer du bon fonctionnement de notre programme. 63
  • 63. CONVERSION DE TYPES DE DONNÉES EN PL/SQL CONVERSION EXPLICITE On utilise des fonctions fournies pas PL/SQL. Exemple:   Pour convertir une valeur CHAR en une valeur DATE ou NUMBER, on utilise respectivement les fonctions TO_DATE ou TO_NUMBER, Exemple DECLARE v_chr1 CHAR :=‘1’; v_nbr1 NUMBER; BEGIN v_nbr1 := TO_NUMBER(v_chr1); dbms_output.put_line( ‘TO_NUMBER ( ‘||v_chr1|| ‘) =‘ || v_nbr1 ) ; END; 64
  • 64. CONVERSION DE TYPES DE DONNÉES EN PL/SQL CONVERSION EXPLICITE  Quelques fonctions de conversion BIN_TO_NUM( bit [,bit[...]] ) Conversion d'une BIN_TO_NUM(1,0,1,0)  10 suite de bits en nombre TO_CHAR( date [, 'format' ] ) TO_CHAR( nombre [, 'format' ] ) Transformation d'un type DATE ou NUMBER en chaîne TO_CHAR( SYSDATE, 'DD/MM/YYYY HH24:MI:SS' )  18/10/2010 00:27:28 TO_DATE( nombre [, 'format' ] ) TO_DATE( chaîne [, 'format' ] ) Transformation d'un type NUMBER ou CHAR ou VARCHAR2 en date TO_DATE( '18/11/2010', 'DD/MM/RR' )  18/11/10 65
  • 65. CONVERSION DE TYPES DE DONNÉES EN PL/SQL CONVERSION IMPLICITE Quand il est logique, PL/SQL peut implicitement convertir le type de données d'une valeur. Exemple 1:  DECLARE v_chr1 CHAR :=‘1’; v_nbr1 NUMBER; BEGIN v_nbr1 := v_chr1; dbms_output.put_line( v_nbr1 ) ; END; Exemple 2: DECLARE v_bl BOOLEAN; begin v_bl:=1; -- renvoie une erreur “expression du mauvais type » end; 66
  • 66. QUELQUES OPÉRATEURS: LES OPERATEURS LOGIQUES  Les operateurs logiques AND, OR et NOT suivent la logique des trois états indiqués dans le tableau cidessous. AND et OR sont des opérateurs binaires; NOT est un opérateur unaire. L’opérateur AND L’opérateur OR L’opérateur NOT TRUE FALSE NULL TRUE TRUE FALSE NULL FALSE FALSE FALSE FALSE NULL NULL FALSE NULL TRUE FALSE NULL TRUE TRUE TRUE TRUE FALSE TRUE FALSE NULL NULL TRUE NULL NULL FALSE NULL TRUE FALSE TRUE TRUE FALSE TRUE FALSE NULL NULL NULL NULL NULL 67
  • 67. QUELQUES OPÉRATEURS: OPÉRATEURS ARITHMÉTIQUES Operateur Signification = Egal à <>, !=, ~=, ^= Non égal à < Inférieur à > Supérieur à <= Inférieur ou égal à >= Supérieur ou égal à 68
  • 68. QUELQUES OPÉRATEURS: OPÉRATEUR DE CONCATÉNATION  Les double-barres verticales (||) servent comme opérateur de concaténation entre chaines de caractères 69
  • 69. EXERCICE:  Ecrire un bloc PL/SQL pour: Demander de saisir le nom à la console  Afficher le nombre de caractères du nom saisi NB:            Utiliser un fichier  Pour ouvrir un fichier: ed nom_fichier  Pour executer un fichier: @nom_fichier ou bien start nom_fichier Pour afficher un message à la console, utiliser commande SQL*PLUS: PROMPT « Texte à Afficher » Pour récupérer ce qui est saisi par l’utilisateur, utiliser la commande SQL*PLUS: Accept nom_var  Pour utiliser la variable nom_var dans un bloc pl/sql: ‘&nom_var’ Utiliser une variable de type NUMBER(38,0) qui va contenir la longueur de la chaine de caractères Utiliser la fonction length(chaine) pour calculer la longueur de la chaine Pour afficher un message à la console utiliser la fonction: DBMS_OUTPUT.PUT_LINE (texte à afficher) Pour convertir un chiffre en un caractère, utiliser la fonction TO_CHAR() L’opérateur de concaténation est: || Pour activer l’affichage à la console, utiliser la commande: 70 SET SERVEROUTPUT ON Pour désactiver l’affichage des vérifications SET VERIFY OFF
  • 70.  Correction -- configuration de la console SQL*PLUS SET SERVEROUTPUT ON SET VERIFY OFF PROMPT entrer un nom ACCEPT var -- Code PL/SQL DECLARE lg number; BEGIN lg :=length ('&var'); dbms_output.put_line( 'le nombre de caractères dans '|| '&var' || ' est ' || TO_CHAR(lg)) ; 71 END; /