0% ont trouvé ce document utile (0 vote)
81 vues84 pages

PLSQLF

Transféré par

Sofia Jaâouan
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
81 vues84 pages

PLSQLF

Transféré par

Sofia Jaâouan
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Chapitre 2 : PL/SQL

Pr. Abdellah Amine

Année universitaire: 2022/2023


PL/SQL [email protected]
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