56
Programmation PL/SQL Introduction

P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Embed Size (px)

Citation preview

Page 1: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Programmation PL/SQL

Introduction

Page 2: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Procedural Language

extensions to SQL Version 8.0 Disponible dans deux environnements:◦Les outils (Forms, Reports,

Graphics)◦Au serveur de BD

PL/SQL ?

Page 3: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Inclut les énoncés SQL.

Langage avec une structure de bloc.

Déclare des variables et des constantes.

Affecte des valeurs aux variables.

Opérateurs logiques.

Fonctions built-in.

Vue d’ensemble

Page 4: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

if - then if – then – else if – then - elsif loop - end loop for – end loop while – end loop exit goto null

Vue d’ensembleStructures de contrôle

Page 5: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

On peut définir des zones de travail contenant plusieurs enregistrements (les curseurs)

DECLARE CURSOR OPEN FETCH CLOSE

Vue d’ensembleLes curseurs

Page 6: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Une erreur ou un avertissement se nomme une exception

Dans nos programmes nous pouvons mettre une :

Section EXCEPTION

EXCEPTION WHEN … THEN

Vue d’ensembleTraitement d’erreurs

Page 7: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Sous-programme Procédure externe Package Abstraction de données

◦ Collections◦ Structures◦ Types

Déclarations et manipulation d’objets

Vue d’ensemble

Page 8: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Programmation PL/SQL

Notions fondamentales

Page 9: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

3 sections◦ Section déclarative (les variables)◦ Section exécutable (le code)◦ Section des exceptions

La section exécutable est obligatoire

Différentes sortes de blocs◦ Anonyme, nommé, procédure ou

fonction, déclencheur

Structures de blocs

Page 10: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

DECLARESection déclarative (les variables)

BEGINSection exécutable (le code)

EXCEPTIONSection des exceptions (si une erreur)

END;

Structures de blocs(anonyme)

Page 11: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Structures de blocs exempleDECLARE

V_NoEmp NUMBER(4) := 1010;

V_NomE VARCHAR2(20); --variable

BEGIN

/* Retrouver les infos de l'élève */

SELECT NomE

INTO V_NomE FROM Emp

WHERE NoEmp = V_NoEmp;

EXCEPTION

WHEN NO_DATA_FOUND THEN

INSERT INTO TableErreur (ColonneInfo)

VALUES (‘Employé 1010 n''existe pas');

END;

Page 12: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Commentaires

-- sur une ligne

∕* sur plusieurs lignes physiques *∕

Page 13: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Maximum 30 caractères ◦ tous significatifs

Commence par une lettre Peut contenir

◦ $◦ _◦ #

Pas d ’espace Pas de différence entre maj et

min

Nom d ’objet

Page 14: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Nombre◦ 415, 21.6, 3.05 E19, null, …

chaîne de caractères◦ ‘ chaîne de caractères ’◦ ‘ 31-jan-97 ’◦ null

booléen◦ TRUE◦ FALSE◦ NULL

Littéraux

Page 15: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

38 types différents

Numérique◦ NUMBER

Caractère◦ VARCHAR2, CHAR

Booléen◦ BOOLEAN

Date Heure◦ DATE

Type de variables

Page 16: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Nom_Var Type [CONSTANT] [NOT NULL] [:=valeur]

Exemples : V_DateEmbauche DATE; V_AssezDonnees BOOLEAN; V_RevenueTot NUMBER (15,2); V_LongPara VARCHAR2(2000); C_Date CONSTANT DATE := ‘ 15-avr-99 ’;

V_Temp NUMBER NOT NULL := 0;

V_Compte NUMBER := 0; V_Compte NUMBER DEFAULT 0;

C_ValMin CONSTANT NUMBER(5) := 10;

V_NoEmp Emp.NoEmp%TYPE; (Prend le type de la colonne NoEmp de la table Emp et l’applique à la variable V_NoEmp.

Déclaration de variables

Page 17: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Les opérateurs

Opérateur Opération

**, NOT

Puissance,Négation

+,- Signe

*,/ Mul, Div

+, - Add, Sous|| ConcaténationOpérateursRelationnels

Voir acétate suivante

AND Et

OR Ou

Page 18: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Les opérateurs relationnels

Opérateur Opération

= Égal à

<>, !=, ~= Différent

< Plus petit

> Plus grand

<= Plus petit ou égal

>= Plus grand ou égal

Page 19: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

IS NULL◦ Compare avec la valeur NULL◦ IF V_Temp IS NULL THEN …

LIKE◦ Compare avec une valeur

contenant des frimes◦ V_Nom LIKE ‘L%SE’

(permet Lise, Lyse ou Louise) BETWEEN IN

Les autres opérateurs

Page 20: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Seulement les énoncés de DML (Data Manipulation Language)

◦SELECT◦INSERT◦UPDATE◦DELETE

Le SQL permis

Page 21: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

• INSERT en SQLINSERT INTO TABLE Classes (Dept, Cours, Groupe, Description, Max_Ele, Inscrits, Local)VALUES (‘INF’,101, 2901, ‘Intro prog’,30, 28, ‘C5:29’);

• INSERT en PL/SQL

DECLARE V_Texte Classes.Description%TYPE;BEGIN V_Texte := ‘Intro prog’; INSERT INTO Classes

(Dept, Cours, Groupe, Description,Max_Ele, Inscrits, Local)

VALUES (‘INF’,101, 2901, V_Texte, 30, 28, ‘C5:29’);

END;

INSERT

Page 22: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Le SELECT doit retourner une ligne sinon il y aura erreur (EXCEPTION)

SELECT Nom_Colonne INTO Variable FROM Table WHERE Clause_Where;

Exemple:

DECLAREV_Dept Classes.Dept%TYPE;V_Cours Classes.Cours%TYPE;

BEGINSELECT Dept, Cours

INTO V_Dept, V_Cours FROM Classes

WHERE Local = ‘C5.29’;END;

SELECT

Page 23: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

DECLARE V_No Eleve.No%TYPE;BEGIN SELECT Seq_EleveId.NEXTVAL INTO V_No FROM DUAL;

INSERT INTO Eleve (No,Nom,Prenom) VALUES (V_No, ‘Tard’, ‘Guy’);

INSERT INTO Eleve (No,Nom, Prenom) VALUES (Seq_EleveId.NEXTVAL, ‘Polo’, ‘Marco’);

END;

INSERT + SELECT

Page 24: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Package permettant des sorties dans SQL*Plus venant de procédures PL/SQL

Il faut obligatoirement avoir:◦ SET SERVEROUTPUT ON

PROCEDURE Prc_Sal (P_id NUMBER) IS V_TempSal NUMBER; BEGIN SELECT Salaire INTO V_TempSal FROM Employe WHERE id = P_id;

DBMS_OUTPUT.PUT_LINE ('Salaire=‘ || TO_CHAR(V_TempSal)); END;

DBMS_OUTPUT

Page 25: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Les énoncés decontrôle

Page 26: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

IF condition THENune séquence d’instructions

END IF;

Exemple:IF V_TotalVente > V_Quota THEN UPDATE Employe SET Salaire = Salaire +

V_Bonus WHERE id = V_Temp;END IF;

IF THEN

Page 27: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

IF condition THENune séquence d’instructions

ELSEune séquence d’instructions

END IF;

Exemple:IF V_TypeTrans = ‘CR’ THEN UPDATE Compte SET Balance = Balance +

V_Credit WHERE …;ELSE UPDATE Compte SET Balance = Balance –

V_Credit WHERE …;END IF;

IF THEN ELSE

Page 28: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

IF condition THENune séquence d’instructions

ELSIF condition THENune séquence d’instructions

ELSEune séquence d’instructions

END IF;

Exemple:IF V_TotalVentes > 500000 THEN V_Bonus:=15000;ELSIF V_TotalVentes > 50000 THEN V_Bonus:=5000;ELSE V_Bonus:=1000;END IF;

IF THEN ELSIF

Page 29: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Quand une erreur arrive on dit qu’une exception s’est produite

Si nécessaire, on traite les exceptions dans la section EXCEPTION

Il y a des exceptions:◦ Pré-définies◦ Définies par l’usager

Les exceptions

Page 30: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

ACCESS_INTO_NULL DUP_VAL_ON_INDEX INVALID_NUMBER LOGIN_DENIED NO_DATA_FOUND NOT_LOGGED_ON TOO_MANY_ROWS VALUE_ERROR ZERO_DIVIDE OTHERS

Exceptions Pré-définies

Page 31: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

DECLARE V_TempSal NUMBER;BEGIN

SELECT salaireINTO V_TempSalFROM EmployeWHERE Nom = ‘Tremblay’;…

EXCEPTIONWHEN NO_DATA_FOUND THEN Message(‘Tremblay n’’existe

pas’);WHEN TOO_MANY_ROWS THEN Message(‘Il y a plusieurs

Tremblay’);END;

Exemple

Page 32: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

On utilise une exception usager lorsque l’on rencontre un cas particulier (un cas à tous les 2 ans par exemple)

DéclarationsDECLARE Nom_Exeption EXCEPTION;…

DéclenchementBEGINIF Condition THEN RAISE Nom_Exception;…

CodeEXCEPTION

WHEN Nom_Exception THENTraitement de l’exeption;

END;…

Exceptions Usager

Page 33: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Procédures et Fonctions

de base de données

Page 34: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Créer une Procédure

• Utiliser un éditeur pour écrire un énoncé SQL– CREATE PROCEDURE

• Transporter l’énoncé dans SQLPLUS.

• Pour détruire la procédure– DROP PROCEDURE nom;

Page 35: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Syntaxe de l’énoncé SQL

CREATE [OR REPLACE]

PROCEDURE Nom_fct(Paramètres[,…])

IS

[Déclarations]

BEGIN

Énoncés;

[EXCEPTION

Traitement d ’exception;]

END;

Page 36: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Il est possible d’utiliser les paramètres pour retourner de l’information (passage par valeur ou référence).

Nom_Paramètre [ IN | OUT | INOUT ] Type [ := valeur par défaut ]◦ pas de restriction sur le type

Ex. NUMBER(4) - - invalideNUMBER - - valide

IN : valeur transférée vers la procédure mais non retournée.

OUT : valeur retournée uniquement. INOUT : valeur transféré et retournée. Par défaut le préfix IN est appliqué.

Paramètred ’une procédure

Page 37: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

ExempleCREATE PROCEDURE

Verif(P_Nom IN VARCHAR2, P_No OUT NUMBER)IS DéclarationBEGIN Énoncées;[EXEPTION

Traitement des exceptions;END;]

Exemple de paramètres

Page 38: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Utiliser l’énoncé SQL◦ CREATE FUNCTION

Créer une fonction

CREATE [OR REPLACE] FUNCTION Nom_fct(Paramètres[,…]) RETURN Type

IS

Déclarations

BEGIN

Enoncés;

RETURN …;

[EXCEPTION

Traitement d ’exception;]

END;

• Pour détruire la procédure– DROP FUNCTION Nom_fct;

Page 39: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

D’une autre fonction ou procédure.

D’un outils interactif◦ex: SQL PLUS.

D ’une application◦Form builder◦programme avec pré-compilateur

Dans un énoncé SQL (pour une fonction).

Appel d’uneprocédure ou fonction

Page 40: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

EXECUTE Nom_fct(Paramètre[,…¸]);

Exemple:◦ soit la procédure Fct_Augmt_Sal(P_NoEmp, P_Montant)◦ EXECUTE Fct_Augmt_Sal (1043,200);

Appel de SQLPLUS PROCEDURE

Page 41: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Créer une variable session

VARIABLE V_Montant NUMBER

Exécuter la fonction

EXECUTE :V_Montant := Fct_Revenu(1243);

Appel de SQLPLUSFONCTION

Page 42: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Dans SELECT, INSERT, UPDATE, DELETE, comme les fonctions SQL régulières

Appel d’une fonctiond’un énoncé SQL

SELECT Nom, TO_DATE(date_embauche), Revenu(id)

FROM employe

ORDER BY Revenu(id);

Page 43: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Met fin à l’exécution d ’une procédure ou fonction.

Fonction:◦ RETURN (valeur)

Procédure:◦ RETURN

L ’énoncé RETURN

Page 44: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

PL/SQL Avancé

• Les variables simples• Les variables de type enregistrement

• Structure itérative (boucles)• Définition et manipulation d'un curseur

Page 45: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Exemple 1:V_NoEmp employe.id%TYPE; (variable ayant le même type que la colonne id de la table employe)

Exemple 2:V_Essai V_NoEmp%TYPE;(variable du même type qu'une autre variable)

Variable simple

Page 46: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

LOOPSéquence d ’instructions

END LOOP;on sort de la boucle avec: EXIT WHEN ou EXIT

Exemple1:DECLARE

…BEGIN

LOOPSELECT…EXIT WHEN V_Salaire >

200;END LOOP;

END;

Boucles SANS CONDITION

Page 47: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Exemple2On cherche le nom et le salaire du premieremployé dont le salaire est plus grand que20000 et on les inscrit dans la table Tempo.

DECLAREV_Sal Employe.Salaire%TYPE;V_NomE Employe.Nom%TYPE;

BEGIN LOOP SELECT Nom, Salaire INTO V_Sal, V_NomE

FROM Employe; IF V_Sal > 20000 THEN EXIT;

END IF; END LOOP;

INSERT INTO Tempo VALUES(V_Sal, V_NomE);COMMIT;

END;

Boucle sans condition

Page 48: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

WHILE Condition LOOP Séquence d ’instructions

LOOP;

Exemple:On cherche le nom et le salaire du premieremployé dont le salaire est supérieur à20000 et on les inscrit dans la table

tempo.

DECLAREV_Sa; Employe.Salaire%TYPE;V_NomE Employe.Nom%TYPE;

BEGINWHILE V_Sal < 20000 LOOP

SELECT Salaire,Nom INTO V_Sal,V_ NomE

FROM Employe;END LOOP;

INSERT INTO Tempo VALUES(V_Sal, V_NomE);COMMIT;

END;

Boucles avec CONDITION

Page 49: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

FOR V_Compteur IN [REVERSE] BorneInf..BorneSup LOOPSéquence d'instructions;

END LOOP;

Bornes: variables ou des constantes numériques Si la variable compteur n'est pas définie à

l'exécution de la boucle, elle le sera implicitement

exemple:V_Limite := 50;FOR V_Compteur IN 1 ..V_Limite LOOP

Séquences d'instructions; END LOOP;

Note : l’incrémentation ou la décrémentation ne

peut être que de 1

Boucles avec CONDITION

Page 50: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

L'utilisation d'un curseur nous permet de manipuler ligne par ligne le résultat d'une requête qui retourne plusieurs lignes. Le curseur pointe sur la ligne courante de l'ensemble des lignes.

Mot clef CURSOR dans la section DECLARE d'un bloc d'instruction PL/SQL

CURSOR NomDuCurseur IS Requete

Exemple 1: CURSOR Cur_Vente IS

SELECT Numero,Detail,Quantite

FROM Produit;

Définition et utilisation du curseur

Page 51: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

CURSOR Cur_Vente IS SELECT Num, Detail, Qte

FROM JeuWHERE Qte > 30;

Le curseur vente permet d’accéder auxcolonnes: Num, Detail et Qte de chacun desjeux dont la Qte > 30.

Exemple 2:

Page 52: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

OPEN Nom_Curseur(initialisation (ouverture) du curseur)

FETCH Nom_Curseur INTO Nom_Var [,…](obtenir des informations de la ligne courrant et les placer dans les variables.)

ex. FETCH Cur_Vente INTO V_Num, V_Detail,V_Qte

CLOSE Nom_Curseur fermeture du curseur

Manipulation du curseur

Page 53: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Nom_Curseur%NOTFOUND: vrai, si la dernière instruction FETCH n’a pas réussie parce qu’il ne reste plus de rangée à traiter

Nom_Curseur%FOUND: vrai si la dernière instruction FETCH a réussi

Nom_Curseur%ROWCOUNT: retourne le nombre de rangées qui ont été traitées par l’instruction FETCH

Nom_Curseur%ISOPEN: donne vrai si le curseur est ouvert

Interrogation du curseur

Page 54: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Trouve le profit des jeux dont la cote est B et les résultats sont conservés dans une table (tempo) pour traitement ultérieur.

DECLAREV_No Jeu.Numero%TYPE;V_PrixNet Jeu.Detail%TYPE;V_PrixGros Jeu.Gros%TYPE;V_ProfitPourcent Tempo.Profit%TYPE;

CURSOR Cur_CurseurB IS SELECT Numero, Detail, Gros

FROM Jeu WHERE Cote = ‘ B ’;

BEGINOPEN Cur_CurseurB; curseur placé avant première

rangéeFETCH Cur_CurseurB

INTO V_No, V_PrixNet, V_PrixGros;--cuseur placé sur la rangée suivante et met les infos dans --les variables

WHILE Cur_CurseurB%FOUND LOOPV_ProfitPourcent := V_PrixNet –

V_PrixGros/V_PrixNet * 100;INSERT INTO Tempo

VALUES (V_No,V_ProfitPourcent);--traitement de la rangée suivanteFETCH Cur_CurseurB

INTO V_No, V_PrixNet, V_PrixGros;END LOOP;CLOSE Cur_CurseurB;COMMIT;END;

While LOOPS

Page 55: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Exemple:DECLAREV_No Jeu.Numero%TYPE;V_PrixNet Jeu.Detail%TYPE;V_PrixGros Jeu.Gros%TYPE;V_ProfitPourcent Tempo.Profit%TYPE;

CURSOR Cur_CurseurB IS SELECT Numero, Detail, Gros

FROM Jeu WHERE Cote = ‘ B ’;

BEGINOPEN Cur_CurseurB; curseur placé avant première

rangéeLOOPFETCH Cur_CurseurB

INTO V_No, V_PrixNet, V_PrixGros;--cuseur placé sur la rangée suivante et met les infos dans --les variables

EXIT WHEN Cur_CurseurB%NOTFOUND; --sort lorsqu ’il n ’y a plus de rangée à fetchéeV_ProfitPourcent := V_PrixNet –

V_PrixGros/V_PrixNet * 100;INSERT INTO Tempo VALUES (V_No,V_ProfitPourcent);

END LOOP;CLOSE Cur_CurseurB;COMMIT;END;

Boucle LOOP…END LOOP

Page 56: P rocedural L anguage extensions to SQL Version 8.0 Disponible dans deux environnements: Les outils (Forms, Reports, Graphics) Au serveur de BD

Exemple:DECLAREV_No Jeu.Numero%TYPE;V_PrixNet Jeu.Detail%TYPE;V_PrixGros Jeu.Gros%TYPE;V_ProfitPourcent Tempo.Profit%TYPE;

CURSOR Cur_CurseurB IS SELECT Numero, Detail, Gros

FROM Jeu WHERE Cote = ‘ B ’;--enregistrement pour recevoir les données fetchéesCur_LigneJeu Cur_CurseurB%ROWTYPE;

BEGIN--- OPEN curseur est fait implicitementFOR Cur_LigneJeu IN Cur_CurseurB LOOP---un FETCH implicite est fait

V_ProfitPourcent := Cur_LigneJeu.Detail – Cur_LigneJeu.Gros/

Cur_LigneJeu.Detail * 100;INSERT INTO Tempo

VALUES (Cur_LigneJeu.Numero,V_ProfitPourcent);

END LOOP;--- CLOSE curseur est fait implicitement COMMIT;END;

Curseur FOR LOOPS