Vous êtes sur la page 1sur 84

Chapitre 2 : PL/SQL

Pr. Abdellah Amine

Année universitaire: 2022/2023


PL/SQL a.amine@usms.ma
Objectifs

Construction des procédures ou fonctions stockées qui


améliorent le mode client-serveur par stockage des procédures ou
fonctions souvent utilisées au niveau serveur

Gestion des erreurs

Construction de triggers (ou déclencheurs)

Traitement de transactions

PL/SQL Année 2022/2023 2


Sommaire
Rappel général

Blocs

Variables

Instructions

Structure de contrôle

Curseurs

Gestion des erreurs

Procédures/fonctions stockées

Packages

Triggers

PL/SQL Année 2022/2023 3


Structure d’un bloc

Un programme ou une procédure PL/SQL est un


ensemble de un ou plusieurs blocs. Chaque bloc
comporte trois sections :

1. Section déclaration
2. Section corps du bloc
3. Section traitement des erreurs (Exception)

PL/SQL Année 2022/2023 4


Section déclaration

Contient la description des structures et des variables


utilisées dans le bloc:

Section facultative

Commence par le mot clé DECLARE

PL/SQL Année 2022/2023 5


Section corps du bloc

Contient les instructions du programme et


éventuellement, à la fin, la section de traitement des
erreurs

Section obligatoire

Commence par le mot clé BEGIN

Se termine par le mot clé END


PL/SQL Année 2022/2023 6
Section traitement des erreurs

Facultative

Introduite par le mot clé EXCEPTION

PL/SQL Année 2022/2023 7


Syntaxe

DECLARE
déclaration
BEGIN
corps-du-bloc
EXCEPTION
traitement-des-erreurs
END;
/ ← A ajouter obligatoirement dans l’exécution d’un
script
PL/SQL Année 2022/2023 8
Exemple

SET SERVEROUTPUT ON

DECLARE x VARCHAR2(10);

BEGIN
x := 'Bonjour';

DBMS_OUTPUT.PUT_LINE(x);
END;
/
PL/SQL Année 2022/2023 9
Exemple1

SET SERVEROUTPUT ON

DECLARE
erreurEx EXCEPTION;
Nom_e editeur.nom%TYPE;
revue_p revue.nomRevue%TYPE;
titre_p article.titre%TYPE;
BEGIN
...
/
PL/SQL Année 2022/2023 10
Exemple1 (suite)
SET SERVEROUTPUT ON
DECLARE
x VARCHAR2(10);
erreurEx EXCEPTION;
id_revue_p revue.idRevue%TYPE;
nom_revue revue.nomRevue%TYPE;
id_editeur_p revue.idEditeur%TYPE;
BEGIN
SELECT idRevue, nomRevue, idEditeur
INTO id_revue_p, nom_revue, id_editeur_p
FROM revue WHERE idRevue = 1;
IF id_editeur_p IS NOT NULL
THEN RAISE erreurEx;
END IF;
DBMS_OUTPUT.PUT_LINE(nom_revue || ' OK');
END;
/

PL/SQL Année 2022/2023 11


Exemple1 (suite partie exception)
SET SERVEROUTPUT ON
DECLARE
x VARCHAR2(10);
……….
BEGIN
SELECT idRevue, nomRevue, idEditeur
INTO id_revue_p, nom_revue, id_editeur_p
FROM revue WHERE idRevue = 1;
IF id_editeur_p IS NOT NULL
THEN RAISE erreurEx; OK
END IF;
DBMS_OUTPUT.PUT_LINE(nom_revue || ' OK');
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('numéro inconnu');
WHEN erreurEx THEN
DBMS_OUTPUT.PUT_LINE(nom_revue || ' problème');
END;
/
PL/SQL Année 2022/2023 12
Exemple1 (suite partie exception)
SET SERVEROUTPUT ON
DECLARE
x VARCHAR2(10);
……….
BEGIN
SELECT idRevue, nomRevue, idEditeur
INTO id_revue_p, nom_revue, id_editeur_p
FROM revue WHERE idRevue = 1;
IF id_editeur_p IS NOT NULL
THEN RAISE erreurEx; NON OK
END IF;
DBMS_OUTPUT.PUT_LINE(nom_revue || ' OK');
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('numéro inconnu');
WHEN erreurEx THEN
DBMS_OUTPUT.PUT_LINE(nom_revue || ' problème');
END;
/
PL/SQL Année 2022/2023 13
Types de variables

Variables scalaires

Types composés

•Enregistrement (record)

• Table

PL/SQL Année 2022/2023 14


Variables scalaires

Types issues de SQL : CHAR, NUMBER,


DATE, VARCHAR(2)

Types PL/SQL : BOOLEAN, SMALLINT,


BINARY_INTEGER, DECIMAL, FLOAT,
INTEGER, ROWID, REAL

Les variables hôtes sont préfixées par « : »


PL/SQL Année 2022/2023 15
Déclaration des variables scalaires

nom-variable nom-du-type
Exemple
X varachar(2);

nom-variable nom-table.nom-attribut%Type
Exemple
name_trevue revue.nomRevue%Type

PL/SQL Année 2022/2023 16


Déclaration pour un enregistrement (1)

Soit par référence à une structure de table ou de


curseur en utilisant :
ROWTYPE :

nom-variable nom-table%ROWTYPE;

nom-variable nom-curseur%ROWTYPE;

PL/SQL Année 2022/2023 17


Exemple

DECLARE
editeur_p editeur%ROWTYPE;
BEGIN
SELECT * INTO editeur_p
FROM editeur WHERE idediteur = 4;
DBMS_OUTPUT.PUT_LINE (editeur_p.nom || ' ' ||
editeur_p.telephone || ' ' || editeur_p.pays);
END;
/

PL/SQL Année 2022/2023 18


Déclaration pour un enregistrement (1)

Soit par énumération des rubriques qui la composent.


Cela se fait en deux étapes :

•Déclaration du type enregistrement


Type nom-du-type-record IS RECORD(
nom-attribut1 type-attribut1,
nom-attribut2 type-attribut2, ….);
•Déclaration de la variable de type enregistrement
nom-variable nom-du-type-record;

PL/SQL Année 2022/2023 19


Déclaration pour un enregistrement (1)

DECLARE
TYPE type_article IS RECORD (
num_a article.idArticle%TYPE, titre_a article.titre%TYPE,
volume_article article.volume%TYPE);
rec_article type_article;
BEGIN
SELECT * INTO rec_article from article WHERE idArticle=1;
DBMS_OUTPUT.PUT_LINE (rec_article.num_a || ' ' || rec_article.titre_a
|| ' ' || rec_article.volume_article);
END;
/

PL/SQL Année 2022/2023 20


Tables

Structure composée d’éléments d’un même type


scalaire

L’accès à un élément de la table s’effectue grâce à un


indice, ou clé primaire

Cet index est déclaré de type BINARY_INTEGER


(valeurs entières signées)

PL/SQL Année 2022/2023 21


Déclaration pour une table

 Deux étapes :

•Déclaration du type de l’élément de la table

•Déclaration de la variable de type table

PL/SQL Année 2022/2023 22


Déclaration pour une table

 Déclaration du type de l’élément de la table :

TYPE nom-du-type-table
IS TABLE OF type-argument
INDEX BY BINARY_INTEGER;

Déclaration de la variable de type table :


nom-variable nom-du-type-table;

PL/SQL Année 2022/2023 23


Déclaration pour une table
DECLARE
TYPE tabNom IS TABLE OF VARCHAR2(20)
INDEX BY BINARY_INTEGER;
tableNom tabNom;
i BINARY_INTEGER;
BEGIN
tableNom(5) := 'Dupont';
i := 10;
tableNom(i) := 'Dupond';
END;
/ PL/SQL Année 2022/2023 24
Déclaration pour une table
DECLARE
TYPE tabNom IS TABLE OF VARCHAR2(20) INDEX
BY BINARY_INTEGER;
tableNom tabNom;
i BINARY_INTEGER;
BEGIN
INDEX
tableNom(5) := 'Dupont';
i := 10;
tableNom(i) := 'Dupond';
DBMS_OUTPUT.PUT_LINE(tableNom(i) );
END ;
/
PL/SQL Année 2022/2023 25
Déclaration pour une table
DECLARE
TYPE tabNom IS TABLE OF VARCHAR2(20) INDEX
BY BINARY_INTEGER;
tableNom tabNom;
i BINARY_INTEGER;
Via Num
BEGIN de case
tableNom(5) := 'Dupont';
i := 10;
tableNom(i) := 'Dupond';
DBMS_OUTPUT.PUT_LINE(tableNom(5) );
END;
/
PL/SQL Année 2022/2023 26
Variables (scalaires et composées)
Valeur initiale :
nom-variable nom-type := valeur;

•Constante (2 types):

nom-variable nom-type DEFAULT valeur;

ou

nom-variable CONSTANT nom-type := valeur ;

PL/SQL Année 2022/2023 27


Variables (scalaires et composées)
Visibilité :
une variable est utilisable dans le bloc où elle a été définie ainsi
que dans les blocs imbriqués dans le bloc de définition, sauf si
elle est redéfinie dans un bloc interne

PL/SQL Année 2022/2023 28


Conversion de type

Explicite par :
TO_CHAR,
TO_DATE,
TO_NUMBER,
……

Implicite, par conversion automatique

PL/SQL Année 2022/2023 29


Instructions (1)

Affectation

Instructions du langage SQL : CLOSE, COMMIT, DELETE,


FETCH, INSERT, LOCK, OPEN, ROLLBACK, SAVEPOINT,
SELECT, SET TRANSACTION, UPDATE

PL/SQL Année 2022/2023 30


Instructions (2)

Instructions de contrôle itératif ou répétitif

 Instructions de gestion de curseurs

 Instructions de gestion des erreurs

PL/SQL Année 2022/2023 31


Affectation

Opérateur d’affectation :=

Option INTO dans un ordre SELECT

 Instruction FETCH avec un curseur

PL/SQL Année 2022/2023 32


Affectation / Exemple1

DECLARE
TYPE editeur IS RECORD (
nom_e VARCHAR(20),
pays VARCHAR(20));
editeurpaper editeur;
convers NUMBER(6,5);
BEGIN
convers := 6.55957;
editeurpaper.nom_e := 'Groupe de recherche';
editeurpaper.pays := 'Maroc';
DBMS_OUTPUT.PUT_LINE(editeurpaper.pays);
END;
/
PL/SQL Année 2022/2023 33
Affectation / Exemple2

DECLARE
v_nom editeur.nom%TYPE;
v_telephone editeur.telephone%TYPE;
BEGIN
SELECT nom, telephone INTO v_nom, v_telephone
FROM editeur WHERE idediteur=1;
DBMS_OUTPUT.PUT_LINE (v_nom ||' '|| v_telephone);
END;
/

PL/SQL Année 2022/2023 34


Affectation / Exemple3

DECLARE
TYPE recEditeur IS RECORD (
r_nom editeur.nom%TYPE,
r_telephone editeur.telephone%TYPE);
r_editeur recEditeur;
BEGIN
SELECT nom, telephone INTO r_editeur
FROM editeur WHERE idediteur=1;
DBMS_OUTPUT.PUT_LINE (r_editeur.r_nom ||' '||
r_editeur.r_telephone);
END;
/

PL/SQL Année 2022/2023 35


Affectation / Exemple4

DECLARE
r_editeur editeur%ROWTYPE;
BEGIN
SELECT * INTO r_editeur
FROM editeur WHERE idediteur=1;
DBMS_OUTPUT.PUT_LINE (r_editeur.nom ||' '||
r_editeur.telephone);
END;
/

PL/SQL Année 2022/2023 36


Structure de contrôle

Structure alternative

 Structure répétitivités

PL/SQL Année 2022/2023 37


Structures alternatives

IF condition THEN
instructions;
END IF;

IF condition THEN
instructions;
ELSE
instructions;
END IF;

PL/SQL Année 2022/2023 38


Structures alternatives

IF condition THEN
instructions;
ELSE IF
instructions;
ELSE
instructions;
END IF;

PL/SQL Année 2022/2023 39


Structures répétitives

LOOP
instructions;
END LOOP;
LOOP
instructions;
EXIT WHEN condition;
END LOOP;

PL/SQL Année 2022/2023 40


Structures répétitives(1)

LOOP

IF condition THEN

EXIT;

END IF;

END LOOP;

PL/SQL Année 2022/2023 41


Structures répétitives(2)

FOR Variable-indice IN [REVERSE]

Val-début .. Val-fin

LOOP

Instructions;

END LOOP;

PL/SQL Année 2022/2023 42


Structures répétitives(2)

 variable-indice est une variable locale (locale à la boucle)


non déclarée

val-début et val-fin sont des variables locales déclarées et


initialisées ou alors des constantes

le pas est -1 si REVERSE est présent, sinon il est égal à +1

PL/SQL Année 2022/2023 43


Structures répétitives(2)

Exemple : Table de multiplication


SET SERVEROUTPUT ON
declare
type tablemul is record ( par8 number(6), par9 number(6));
type tabledentiers is table of tablemul index by binary_integer;
ti tabledentiers;
i number;
begin
for i in 1..10 loop
ti(i).par9 := i*9 ;
ti(i).par8:= i*8;
dbms_output.put_line (i||'*8='||ti(i).par8||' '||i||'*9='||ti(i).par9 );
end loop;
end;
/
PL/SQL Année 2022/2023 44
Structures répétitives(3)

WHILE condition

LOOP

Instructions;

END LOOP;

PL/SQL Année 2022/2023 45


Les curseurs
Il y a création d’un curseur dès qu’on exécute une instruction
SQL. C’est une zone de travail de l’environnement utilisateur
qui contient les informations relatives à l’instruction SQL :
•Le texte source de l’ordre SQL

•Le texte «compilé» de l’ordre SQL

•Un tampon pour une ligne du résultat

•Le statut (cursor status)

•Des informations de travail et de contrôle


PL/SQL Année 2022/2023 46
Curseur implicites
Gérés automatiquement par le noyau dans les cas suivants :

•Une instruction SELECT exécutée sous SQL


Developer

•Une instruction SELECT donnant une seule ligne de


résultat sous PL/SQL

•Les instructions UPDATE, INSERT et DELETE

•......
PL/SQL Année 2022/2023 47
Curseur explicites
 Obligatoires pour un SELECT susceptible de produire
plusieurs lignes résultat :
Quatre étapes :
1. Déclaration du curseur

2. Ouverture du curseur

3. Traitement des lignes du résultat

4. Fermeture du curseur

PL/SQL Année 2022/2023 48


Déclaration du curseur
 Association d’un nom de curseur à une requête SELECT
Se fait dans la section DECLARE d’un bloc PL/SQL
•Syntaxe :

CURSOR nom-curseur IS requête;

Un curseur peut être paramétré :

CURSOR nom-curseur(nom-p1 type-p1 [:= val-défaut], ...)


IS requête;

PL/SQL Année 2022/2023 49


Déclaration du curseur : Exemple

DECLARE
CURSOR C1 IS SELECT titre, pagedebut, pagefin, volume FROM
articleWHERE serie = 123;

CURSOR C2 (p VARCHAR(4), q NUMBER(6)) IS SELECT


telephone, fax, pays FROM editeur WHERE nom= p AND
idediteur= q;

BEGIN ...
PL/SQL Année 2022/2023 50
Ouverture d’un curseur

Alloue un espace mémoire au curseur et positionne les éventuels


verrous
OPEN nom-curseur;
ou
OPEN nom-curseur(liste-par-effectifs);

Pour les paramètres, association par position ou par nom sous la


forme
paramètre-formel => paramètre-réel

PL/SQL Année 2022/2023 51


Ouverture d’un curseur

OPEN C1;

OPEN C2(‘IREMOS’, 23) ;

OPEN C2(q=>23, p=>’ IREMOS’) ;

PL/SQL Année 2022/2023 52


Traitement des lignes

Autant d’instructions FETCH que de lignes résultats :

FETCH nom-curseur INTO liste-variables;

ou

FETCH nom-curseur INTO nom-enregistrement;

Au moins quatre formes possibles

PL/SQL Année 2022/2023 53


Forme 1 : affectation dans des variables ayant même type que les attributs
DECLARE
CURSOR C1 IS SELECT nom, pays
FROM editeur;
v_nom editeur.nom%TYPE;
v_pays editeur.pays%TYPE;
BEGIN
OPEN C1;
LOOP
FETCH C1 INTO v_nom, v_pays;
EXIT WHEN C1%NOTFOUND;
dbms_output.put_line(v_nom|| ' ' ||v_pays) ;
END LOOP;
CLOSE C1;
END;
/
PL/SQL Année 2022/2023 54
Forme 2 : affectation dans un enregistrement (RECORD)
SET SERVEROUTPUT ON
DECLARE
CURSOR C1 IS SELECT nom, pays
FROM editeur where pays like 'U%';
TYPE rec_editeur IS RECORD(v_nom editeur.nom%TYPE,
v_pays editeur.pays%TYPE);
r_editeur rec_editeur;
BEGIN
OPEN C1;
LOOP FETCH C1 INTO r_editeur;
EXIT WHEN C1%NOTFOUND;
dbms_output.put_line(
r_editeur.v_nom|| ' ' ||r_editeur.v_pays) ;
END LOOP;
CLOSE C1;
END;
/ PL/SQL Année 2022/2023 55
Forme 3 : affectation dans une structure de données de type curseur
SET SERVEROUTPUT ON
DECLARE
CURSOR C1 IS SELECT nom, pays
FROM editeur where pays LIKE 'U%';
r_edit C1%ROWTYPE;
BEGIN
OPEN C1; LOOP FETCH C1 INTO r_edit;
EXIT WHEN C1%NOTFOUND;
dbms_output.put_line(r_edit.nom|| ' ' ||r_edit.pays) ;
END LOOP; CLOSE C1;
END;
/

PL/SQL Année 2022/2023 56


Forme 4 : Parcourir le curseur par la boucle for
SET SERVEROUTPUT ON
DECLARE
CURSOR C1 IS SELECT nom, pays
FROM editeur where pays LIKE 'U%';
BEGIN
for r_edit in C1
Loop
dbms_output.put_line(r_edit.nom|| ' ' ||r_edit.pays) ;
END LOOP;
END;
/

PL/SQL Année 2022/2023 57


Statut d’un cureur(1)

PL/SQL Année 2022/2023 58


Statut d’un cureur(2)

PL/SQL Année 2022/2023 59


Modification de données

Se fait habituellement avec INSERT, UPDATE ou DELETE

Possibilité d’utiliser la clause FOR UPDATE dans la déclaration


du curseur. Cela permet d’utiliser la clause

CURRENT OF nom-curseur

Dans la clause WHERE des instructions UPDATE et DELETE.


Cela permet de modifier la ligne du curseur traitée par le dernier
FETCH, et donc d’accélérer l’accès à cette ligne

PL/SQL Année 2022/2023 60


Modification de données
SET SERVEROUTPUT ON
DECLARE
CURSOR C IS SELECT * FROM article
WHERE serie=2 FOR UPDATE OF titre;
BEGIN
FOR art IN C LOOP
DBMS_OUTPUT.PUT_LINE('OK '||art.titre || ' ' ||art.serie);
UPDATE article
SET titre= 'Mda approch for security integration during design phase' WHERE
CURRENT OF C;
END LOOP;
END;
/

PL/SQL Année 2022/2023 61


Modification de données

PL/SQL Année 2022/2023 62


Gestion des erreurs (erreurs standard) (1)

PL/SQL Année 2022/2023 63


Gestion des erreurs (erreurs standard)(2)

La nature d’une erreur peut être connue par appel aux fonctions
SQLCODE et SQLERRM

SQLCODE renvoie le statut d’erreur de la dernière instruction


SQL exécutée (0 si n’y a pas d’erreur)

SQLERRM renvoie le message d’erreur correspondant à


SQLCODE

PL/SQL Année 2022/2023 64


Erreurs utilisateur
DECLARE
nom-anomalie EXCEPTION;
BEGIN
...
... IF ... THEN RAISE nom-anomalie;
...
EXCEPTION
WHEN nom-anomalie THEN

traitement;

END;

PL/SQL Année 2022/2023 65


Erreurs anonymes

Pour les codes d’erreur n’ayant pas de nom


associé, il est possible de définir un nom d’erreur
(code entre -20000 et -20999)

PL/SQL Année 2022/2023 66


Erreurs anonymes : Exemple 1
DECLARE
e EXCEPTION;
PRAGMA EXCEPTION_INIT(e, -20091);
...
BEGIN
...
IF ... THEN RAISE e;
EXCEPTION
WHEN e THEN
...
END;
PL/SQL Année 2022/2023 67
Erreurs anonymes : Exemple 2

DECLARE
e exception;
BEGIN
...
IF ... THEN
RAISE e;
END IF;
...
EXCEPTION
WHEN e THEN
RAISE_APPLICATION_ERROR( -20099, 'nom inéxistant');
END;

PL/SQL Année 2022/2023 68


Erreurs anonymes : Exemple 3

DECLARE
...
BEGIN
...
IF ... THEN RAISE_APPLICATION_ERROR ( -20099, 'nom
inéxistant');
END IF;
END;

PL/SQL Année 2022/2023 69


Description du traitement de l’erreur (syntaxe 1)

BEGIN
...
EXCEPTION
WHEN nom-erreur1 THEN traitement-erreur1;
...
WHEN nom-erreurn THEN traitement-erreurn;

WHEN OTHERS THEN traitement-autres-erreurs;


END;

PL/SQL Année 2022/2023 70


Description du traitement de l’erreur (syntaxe 2)

Possibilité d’écrire :

When nom_erreur1 OR erreur2


Then
……………;

PL/SQL Année 2022/2023 71


Exemple

EXCEPTION
WHEN NO_DATA_FOUND THEN
...;
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('SQLCODE='||TO_CHAR(SQLCODE));
DBMS_OUTPUT.PUT_LINE('SQLERRM:'||TO_CHAR(SQLERRM));
END;

PL/SQL Année 2022/2023 72


Procédures stockées

CREATE [OR REPLACE] PROCEDURE nom-procédure [(argument [mode]


type, ...)] [IS | AS]
bloc-procédure;

 argument : nom d’un paramètre formel


 mode : définit si le paramètre formel est en entrée (IN), en sortie (OUT) ou en
entrée sortie (IN OUT). Par défaut : IN

 type : le type du paramètre formel

bloc-procédure : le corps PL/SQL de la procédure

PL/SQL Année 2022/2023 73


Exemple 1

Ecrire une procédure permettent de modifier le titre en majuscule des articles


dont le volume est supérieur à 10 et la série correspond à la série communiquée
par l’utilisateur, et modifier le titre en minuscule des articles dont le volume est
inférieur à 10 et dont la série correspond à celle communiquée comme entrée.

PL/SQL Année 2022/2023 74


Exemple 1 Réponse

CREATE OR REPLACE PROCEDURE


modifierTitre (num_serie IN article.serie%TYPE) IS
BEGIN
BEGIN
UPDATE article SET titre = UPPER(titre)
WHERE serie = num_serie AND volume> 10;
END;
BEGIN
UPDATE article SET titre = LOWER(titre)
WHERE serie = num_serie AND volume < 10;
END;
END modifierTitre;
PL/SQL Année 2022/2023 75
Fonctions stockées

CREATE [OR REPLACE] FONCTION nom-fonction [(argument [IN] type,


...)] type-retour [IS | AS]
bloc-fonction;

Les paramètres sont forcément en entrée (IN)

Dans le bloc-fonction :
RETURN nom-variable;

PL/SQL Année 2022/2023 76


Exemple 1

Ecrire une fonction permettant de retourner la somme des articles publiés dans
une série communiquer par l’utilisateur.

PL/SQL Année 2022/2023 77


Exemple 1 Réponse

CREATE OR REPLACE FUNCTION


sommeArticle_by_serie (num_serie IN article.serie%TYPE) IS
som_a NUMBER(8) := 0;
e Exception
BEGIN
SELECT SOM(idArticle) into som_a form article
WHERE serie = num_serie;
if som_a is null OR NOT_DATA_FOUND THEN RAISE e;
END IF;
RETURN som_a;
EXCEPTION
WHEN e THEN RETURN 0;
END sommeArticle_by_serie;
PL/SQL Année 2022/2023 78
Informations à propos des fonctions/procédures

Erreurs
• USER_ERRORS
• ALL_ERRORS
•DBA_ERRORS
Infos sur les procédures/fonctions :
• USER_OBJECTS
•ALL_OBJECTS
• DBA_OBJECTS
 Infos sur les textes source :
• USER_SOURCE
• ALL_SOURCE
• DBA_SOURCE

PL/SQL Année 2022/2023 79


Suppression d’une procédures/ fonctions stockées

DROP PROCEDURE nom-procédure;

DROP FUNCTION nom-fonction;

PL/SQL Année 2022/2023 80


Appel d’une procédure/fonction stockée dans un bloc PL/SQL

nom-procédure (liste-paramètres-effectifs);

nom-variable := nom-fonction(liste-paramètres effectifs);

PL/SQL Année 2022/2023 81


Appel d’une procédure/fonction stockée dans un script SQL Developer

EXECUTE nom-procédure (liste-paramètres-effectifs);

EXECUTE :nom-variable := nom-fonction(liste-paramètres effectifs);

EXECUTE dbms_output.put_line(nom-fonction(liste-paramètres
effectifs));
PL/SQL Année 2022/2023 82
Exemple: création procédure

CREATE OR REPLACE PROCEDURE


nvEditeur(id editeur.idEditeur%TYPE,
name editeur.nom%TYPE, tel editeur.telephone%Type, fx editeur.fax%Type, pys
editeur.pays%Type)
IS
BEGIN
INSERT INTO editeur (idEditeur, nom, telephone, fax, pays)
VALUES (id, name, tel, fx, pys);
END nvEditeur;

PL/SQL Année 2022/2023 83


Exemple: Exécution procédure

EXECUTE nvEditeur(123, ‘iromos’,'0654345367','fax1', 'Maroc');

PL/SQL Année 2022/2023 84

Vous aimerez peut-être aussi