[PDF] Introduction au PL/SQL Oracle 17 oct. 2011 3 Corrigé





Previous PDF Next PDF



[PDF] ED PL/SQL - Cedric-Cnam

21 nov. 2013 Modifiez le programme PL/SQL de l'exercice précédent pour qu'il fonctionne ... Joan Casteel Oracle 11g: PL/SQL Programming



ED PL/SQL

Modifiez le programme PL/SQL de l'exercice précédent pour qu'il fonctionne même Joan Casteel Oracle 11g: PL/SQL Programming



Mise en page 1

Exercices et corrigés. Jérôme GABILLAUD. Anne-Sophie LACROIX. 90 QCM. 93 travaux Oracle 12c - Programmez avec SQL et PL/SQL. Les TP Informatiques. 60. Après l ...



Programmation en PL/SQL Oracle

V.2.2) Correction des erreurs Exercice. Ecrire un programme PL/SQL qui affiche les multiples de 3 4 et 5 qui sont entre 4 et 32. Solution. SET ...



Exercices Corrigés Initiation aux Base de données

Langage SQL. Page 19. Université IBN ZOHR. 2012/2013. Faculté Polydisciplinaire de Ouarzazate. 19. III. Langage SQL. Exercice 1. Soit la base de données 



M2106 - Programmation et administration des bases de données

Ce chier contient les solutions des exercices précédents corrigés en TD. Ouvrir le chier avec SQL Developer et exécuter les instructions une par une. Exercice 



SGBD-PLSQL

Présente les objets-Oracle de chaque utilisateur. Name. Null? Type Correction Exercice recap1. Create or replace Procedure P_Mois. IS v_date DATE ...



BASES DE DONNÉES ET MODÈLES DE CALCUL

Exercices. 54. CHAPITRE 4 • LE LANGAGE SQL DDL. 55. 4.1 Introduction. 55. 4.2 Le ... ORACLE SQL Server



PL/ SQL

) http://download.oracle.com/docs/cd/E11882_01/appdev.112/e17126.pdf (page 110) • Exercice: écrire un bloc PL/SQL qui permet de déclarer deux variable de ...



ED PL/SQL

21 nov. 2013 ED PL/SQL. (Corrigé). Par la suite on considère que les tables utilisées par les exercices ont été déjà crées et.



Programmation en PL/SQL Oracle

Pour surmonter ces limitations Oracle intègre un gestionnaire PL / SQL au serveur de base de données et à certains de ses outils (formulaires



Mise en page 1

Programmez avec SQL et PL/SQL. Oracle 12c. Exercices et corrigés. Jérôme GABILLAUD. Anne-Sophie LACROIX. 90 QCM. 93 travaux pratiques et leurs corrigés.



PL/ SQL

Un programme PL/SQL est composé de fonctions de procédures



ED PL/SQL

ED PL/SQL. (Corrigé). Par la suite on considère que les tables utilisées par les exercices ont été déjà crées et remplies avec les données nécessaires.



NFA011 : corrigé de lexamen 2

27 avr. 2006 Corrigé examen 2. Exercice n° 2 : Ecrivez une procédure stockée PL/SQL qui permet de vérifier avant l'ajout d'une personne dans la base



Gestion des transactions pour la fiabilité et la concurrence

29 janv. 2018 Exercice : Mini-TP : Transaction en SQL standard sous PostgreSQL . ... Exemple : Transaction sous Oracle en PL/SQL .



Introduction au PL/SQL Oracle

17 oct. 2011 Corrigés. 3.1 Introduction au PL/SQL. ?? Exercice 1. DECLARE a NUMBER; b NUMBER; t NUMBER;. BEGIN a := 1; b := 2;. DBMS_OUTPUT .



SQL pour Oracle

émaillé de nombreux exemples et de 50 exercices corrigés qui illustrent Cette partie décrit les caractéristiques du langage procédural PL/SQL d'Oracle.



Module 12 : Les ateliers PL/SQL version 4.1

Tsoft/Eyrolles – PL/SQL pour Oracle 12c exercices et QCM supplémentaires. ... Retrouvez le script créé pour l'Atelier 13 dans l'exercice 2 ...



Mastering Oracle PL/SQL: Practical Solutions

his passion for Oracle and as part of an endeavor to improve the way in which Oracle software is used within the industry Chaim Katzis an Oracle Certified Professional who has worked with Oracle products since Oracle version 4 He specializes in database administration and PL/SQL development and over the years he has written numerous



Module 12 : Les ateliers PL/SQL version 4

Exercice n° 1 Installation Installez Oracle XE sur votre machine d’exploitation en tenant compte de votre système 1 2 Les outils SQL*Plus Questions Quel est l'outil que vous retrouvez sur chaque serveur de base de données installée ? SQL*Plus iSQL*Plus SQL*Plus Worksheet Oracle Enterprise Manager



Déclarations itérations boucles instructions conditionnelles

Les curseurs implicites sont créés par PLSQL lors de l’exécution des commandes SQL qui itèrent sur plusieurs items (INSERT UPDATE DELETE SELECT etc) Les attributs du dernier curseur implicite utilisé sont accessibles par le préfixe SQL : SQL FOUND SQL NOTFOUND SQL ROWCOUNT DECLARE total NUMBER(2); BEGIN UPDATE EMPLOYE



Chapitre 4 Solutions aux Exercices - etsmtlca

1) Formulez en SQL les requêtes suivantes sur le schéma de la BD de la pépinière PleinDeFoin (N B a) à m) sont identiques à l'exercice 2 sur l'algèbre relationnelle) Cherchez les formulations équivalentes : a) Les Clients dont le noTéléphone = (999)999-9999 SELECT * FROM Client WHERE noTéléphone = ‘(999)999-9999’



Cours 2 : PL/SQL Procedural Language/SQL - LRI

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 )



TME 10 : PL/SQL

- des commandes SQL*Plus permettant de positionner des options de modifier la présentation des résultats d'exécuter des fichiers de commandes Une suite de commandes contenant un ou plusieurs blocs PL/SQL doit être terminée par un / 1 1 2 Bloc PL/SQL Un bloc PL/SQL a la structure suivante ( les [ ] encadrant les éléments



Oracle Database PL/SQL Language Reference

Oracle Database PL/SQL Language Reference Oracle Database PL/SQL Language Reference Oracle Database



Oracle Database SQL Language Quick Reference

For more information see these Oracle resources: Oracle Database PL/SQL Language Reference for information on PL/SQL the procedural language extension to Oracle SQL Pro*C/C++ Programmer's Guide Oracle SQL*Module for Ada Programmer's Guide and the Pro*COBOL Programmer's Guide for detailed descriptions of Oracle embedded SQL



- Programmez avec SQL et PL/SQL Oracle 12c

Ce chapitre est consacré à la mise en pratique des premiers concepts du langage PL/SQL c'est-à-dire à bien comprendre la structure de bloc PL/SQL le fonctionnement des curseurs ladéclaration de variable les tableaux et les exceptions Une mise en pratique du package DBMS_OUTPUT est également présentée



Introduction au PL/SQL Oracle - mcoursnet

1 1 Introduction au PL/SQL 1 1 1 PL/SQL Le PL de PL/SQL signi e Procedural Language Il s’agit d’une extension proc edurale du SQL permettant d’e ectuer des traitements complexes sur une base de donn ees Les possibilit es o ertes sont les m^emes qu’avec des langages imp eratifs (instructions en s equence) classiques



PL/SQL (ORACLE) - EXEMPLES - LIRMM

SQL> EXECUTE :a := AGEPLUS2(’a’); PL/SQL procedure successfully completed SQL> print a; A-----1992 Une proc´edure ou une fonction peut ˆetre e?ac´ee : DROP PROCEDURE DROP FUNCTION 2 Variables Les variables peuvent ˆetre de tous les types SQL ou du type BOOLEAN (avec deux valeurs possibles : TRUEet FALSE)



Searches related to exercices corrigés pl sql oracle filetype:pdf

See 3-2: Understanding PL/SQL Records for reference Hints: Use the ROWTYPE attribute on ad_departments table to declare the PL/SQL record variable Use the record field notation to print the record values Assignment 2: Create a PL/SQL block to retrieve the names of some courses from

Introduction au PL/SQL Oracle

Alexandre Mesle

17 octobre 2011

Table des matieres

1 Notes de cours3

1.1 Introduction au PL/SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

1.1.1 PL/SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

1.1.2 Blocs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

1.1.3 Achage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

1.1.4 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

1.1.5 Traitements conditionnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

1.1.6 Traitements repetitifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

1.2 Tableaux et structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

1.2.1 Tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

1.2.2 Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

1.3 Utilisation du PL/SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8

1.3.1 Aectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8

1.3.2 Tables et structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8

1.3.3 Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

1.4 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

1.4.1 Rattraper une exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

1.4.2 Exceptions predenies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

1.4.3 Codes d'erreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

1.4.4 Declarer et lancer ses propres exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

1.5 Sous-programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

1.5.1 Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

1.5.2 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

1.6 Curseurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

1.6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

1.6.2 Les curseurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

1.7 Curseurs parametres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

1.7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

1.7.2 Denition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

1.7.3 Declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

1.7.4 Ouverture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

1.7.5 Lecture d'une ligne, fermeture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

1.7.6 Boucle pour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

1.7.7 Exemple recapitulatif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

1.8 Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

1.8.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

1.8.2 Classication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

1.8.3 Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

1.8.4 Acces aux lignes en cours de modication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

20

1.8.5 Contourner le probleme des tables en mutation . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

1.9 Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

1.9.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

1.9.2 Specication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

1.9.3 Corps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25
1

2 Exercices27

2.1 Introduction au PL/SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

27

2.2 Tableaux et Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

28

2.3 Utilisation PL/SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

30

2.4 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31

2.5 Sous-programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

2.6 Curseurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

2.7 Curseurs parametres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

2.8 Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

35

2.9 Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

36

2.10 Revisions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

37

3 Corriges38

3.1 Introduction au PL/SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

38

3.2 Tableaux et Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

39

3.3 Application du PL/SQL et Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

42

3.4 Sous-programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

46

3.5 Curseurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

49

3.6 Curseurs parametres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

52

3.7 Triggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

53

3.8 Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

62

3.9 Revisions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

63

A Scripts de creation de bases67

A.1 Livraisons Sans contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

67

A.2 Modules et prerequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

68

A.3 Geometrie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

69

A.4 Livraisons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

70

A.5 Arbre genealogique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

71

A.6 Comptes bancaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

72

A.7 Comptes bancaires avec exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

74

A.8 Secretariat pedagogique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

76

A.9 Mariages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

78
2

Chapitre 1

Notes de cours

1.1 Introduction au PL/SQL

1.1.1 PL/SQL

Le PL de PL/SQL signie Procedural Language. Il s'agit d'une extension procedurale du SQL permettant d'eectuer

des traitements complexes sur une base de donnees. Les possibilites oertes sont les m^emes qu'avec des langages

imperatifs (instructions en sequence) classiques.

Ecrivez-le dans un editeur dont vous copierez le contenu dansSQL+. Un script ecrit enPL/SQLse termine obliga-

toirement par un/, sinonSQL+ne l'interprete pas. S'il contient des erreurs de compilation, il est possible d'acher les

messages d'erreur avec la commandeSQL+:SHOW ERRORS.

1.1.2 Blocs

Tout code ecrit dans un langage procedural est forme de blocs. Chaque bloc comprend une section de declaration

de variables, et un ensemble d'instructions dans lequel les variables declarees sont visibles.

La syntaxe estDECLARE

/declarationd ev ariables/BEGIN /instructionsa e xecuter/END;1.1.3 Achage Pour acher le contenu d'une variable, les proceduresDBMSOUTPUT.PUT()etDBMSOUTPUT.PUTLINE()prennent

en argument une valeur a acher ou une variable dont la valeur est a acher. Par defaut, les fonctions d'achage

sont desactivees. Il convient, a moins que vous ne vouliez rien voir s'acher, de les activer avec la commandeSQL+

SET SERVEROUTPUT ON.

1.1.4 Variables

Une variable se declare de la sorte :nom type[:=initialisation] ;L'initisation est optionnelle. Nous utiliserons les m^emes types primitifs que dans les tables. Par exemple :

SETSERVEROUTPUTONDECLARE

cvarchar2(15) :='H elloW orld! ' ;BEGIN

DBMS_OUTPUT.PUT_LINE(c);END;/

Les aectations se font avec la syntaxevariable := valeur; 3

1.1.5 Traitements conditionnels

LeIFet leCASEfonctionnent de la m^eme facon que dans les autres langages imperatifs :IF/condition1 /THEN/instructions1 /ELSE

/instructions2 /ENDIF;voire IF/condition1 /THEN/instructions1 /ELSIF/condition2 //instructions2 /ELSE

/instructions3 /ENDIF;Les conditions sont les m^emes qu'en SQL. Leswitchdu langage C s'implemente en PL/SQL de la facon suivante :CASE/variable/WHEN/valeur1 /THEN/instructions1 /WHEN/valeur2 /THEN/instructions2 /. . .

WHEN/valeurn /THEN/instructionsn /ELSE

/instructionsp ard efaut/ENDC ASE;1.1.6 Traitements repetitifs LOOP ... END LOOP;permet d'implementer les bouclesLOOP /instructions/ENDLOOP;L'instructionEXIT WHENpermet de quitter une boucle.LOOP

/instructions/EXITWHEN/condition/;ENDLOOP;La boucleFORexiste aussi en PL/SQL :FOR/variable/IN/inf/. ./sup/LOOP/instructions/ENDLOOP;Ainsi que la boucleWHILE:WHILE/condition/LOOP/instructions/ENDLOOP;Est-il possible, en bidouillant, d'implementer une boucleDO ... WHILE?

4

1.2 Tableaux et structures

1.2.1 Tableaux

Creation d'un type tableau

Les types tableau doivent ^etre denis explicitement par une declaration de la formeTYPE/type/IS VARRAY(/t a i l l e/)OF/typeElements/;{typeest le nom du type tableau cree par cette instruction

{tailleest le nombre maximal d'elements qu'il est possible de placer dans le tableau.

{typeElementsest le type des elements qui vont ^etre stockes dans le tableau, il peut s'agir de n'importe quel

type.

Par exemple, creons un type tableau de nombres indice de 1 a 10, que nous appeleronsnumberTabTYPE numberTab IS VARRAY(10)OFNUMBER;Declaration d'un tableau

Dorenavant, le type d'un tableau peut ^etre utilise au m^eme titre queNUMBERouVARCHAR2. Par exemple, declarons

un tableau appeletde typenumberTab,DECLARE TYPE numberTab IS VARRAY(10)OFNUMBER;t numberTab;BEGIN /instructions/END;/

Allocation d'un tableau

La creation d'un type tableau met a disposition un constructeur du m^eme nom que le type cree. Cette fonction

reserve de l'espace memoire pour ce tableau et retourne l'adresse memoire de la zone reservee, il s'agit d'une sorte de

malloc. Si, par exemple, un type tableaunumtaba ete cree, la fonctionnumtab()retourne une tableau vide.DECLARE

TYPE numberTab IS VARRAY(10)OFNUMBER;t numberTab;BEGIN t:=numberTab();/utilisationd ut ableau/END;/ Une fois cette allocation faite, il devient presque possible d'utiliser le tableau...

Dimensionnement d'un tableau

Le tableau retourne par le constructeur est vide. Il convient ensuite de reserver de l'espace pour stocker les elements

qu'il va contenir. On utilise pour cela la methodeEXTEND().EXTENDs'invoque en utilisant la notation pointee. Par

exemple,DECLARE TYPE numberTab IS VARRAY(10)OFNUMBER;t numberTab;BEGIN t:=numberTab();t.EXTEND(4);/utilisationd ut ableau/END;/ 5

Dans cet exemple,t.EXTEND(4);permet par la suite d'utiliser les elements du tableaut(1),t(2),t(3)ett(4).

Il n'est pas possible "d'etendre" un tableau a une taille superieure a celle speciee lors de la creation du type tableau

associe.

Utilisation d'un tableau

On accede, en lecture et en ecriture, aui-eme element d'une variable tabulaire nommeTavec l'instructionT(i).

Les elements sont indices a partir de 1.

Eectuons, par exemple, une permutation circulaire vers la droite des elements du tableau t.DECLARE TYPE numberTab IS VARRAY(10)OFNUMBER;t numberTab;inumber;knumber;BEGIN

t:=numberTab();t.EXTEND(10);FOR iIN1..10LOOPt(i) :=i;ENDLOOP;k:=t(10);FOR iinREVERSE2..10LOOPt(i) :=t(i1);ENDLOOP;t(1) :=k;FOR iIN1..10LOOPDBMS_OUTPUT.PUT_LINE(t(i));ENDLOOP;END;/

1.2.2 Structures

Un structure est un type regroupant plusieurs types. Une variable de type structure contient plusieurs variables,

ces variables s'appellent aussi des champs.

Creation d'un type structure

On denit un type structure de la sorte :TYPE/nomType/IS RECORD( /l i s t ed esc hamps/);

nomTypeest le nom du type structure construit avec la syntaxe precedente. La liste suit la m^eme syntaxe que la

liste des colonnes d'une table dans unCREATE TABLE. Par exemple, construisons le typepoint(dans IR2),TYPE point IS RECORD

abscisseNUMBER,ordonneeNUMBER);

Notez bien que les types servant a denir un type structure peuvent ^etre quelconques : variables scalaires, tableaux,

structures, etc.

Declaration d'une variable de type structure

pointest maintenant un type, il devient donc possible de creer des variables de type point, la regle est toujours la

m^eme pour declarer des variables enPL/SQL, par exemple 6 p point;permet de declarer une variablepde typepoint.

Utilisation d'une variable de type structure

Pour acceder a un champ d'une variable de type structure, en lecture ou en ecriture, on utilise la notation pointee :

v.cest le champ appelecde la variable structure appeleev. Par exemple,DECLARE

TYPE point IS RECORD

abscisseNUMBER,ordonneeNUMBER); p point;BEGIN

p.abscisse:= 1;p.ordonnee:= 3;DBMS_OUTPUT.PUT_LINE('p.a bscisse= ' j jp.abscissej j'a ndp .o rdonnee= 'j jp.ordonnee);END;/

Le script ci-dessous cree le typepoint, puis cree une variabletde typepoint, et enn aecte aux champsabscisse

etordonneedu pointples valeurs 1 et 3. 7

1.3 Utilisation du PL/SQL

Ce cours est une introduction aux interactions possibles entre la base de donnees et les scriptsPL/SQL.

1.3.1 Aectation

On place dans une variable le resultat d'une requ^ete en utilisant le mot-cleINTO. Les instructionsSELECTchamp_1, . . . ,champ_nINTOv_1, . . . ,v_nFROM. . .aecte aux variablesv1, ..., vnles valeurs retournees par la requ^ete. Par exempleDECLARE

numNUMBER;nomVARCHAR2(30) :='PoupeeB atman' ;BEGIN

SELECTnumprodINTOnumFROMPRODUITWHEREnomprod=nom;DBMS_OUTPUT.PUT_LINE('L'' a rticle' j jnomj j'a p ourn umero' j jnum);END;/

Pr^etez attention au fait que la requ^ete doit retourner une et une une seule ligne, sinon, une erreur se produit a

l'execution.

1.3.2 Tables et structures

Si vous ne tenez pas a vous prendre la t^ete pour choisir le type de chaque variable, demandez-vous ce que vous

allez mettre dedans! Si vous tenez a y mettre une valeur qui se trouve dans une colonne d'une table, il est possible de

vous referer directement au type de cette colonne avec le typenomTable.nomColonne%type. Par exemple,DECLARE

num PRODUIT.numprod%type;nom PRODUIT.nomprod%type:='PoupeeB atman' ;BEGIN

SELECTnumprodINTOnumFROMPRODUITWHEREnomprod=nom;DBMS_OUTPUT.PUT_LINE('L'' a rticle' j jnomj j'a p ourn umero' j jnum);END;/

Pour aller plus loin, il est m^eme possible de declarer une structure pour representer une ligne d'une table, le type

porte alors le nom suivant :nomTable%rowtype.DECLARE nom PRODUIT.nomprod%type:='PoupeeB atman' ;ligne PRODUIT%rowtype;BEGIN

SELECTINTOligneFROMPRODUITWHEREnomprod=nom;DBMS_OUTPUT.PUT_LINE('L'' a rticle' j jligne.nomprodj j'a p ourn umero' j jligne.numprod);END;/

8

1.3.3 Transactions

Un des mecanismes les plus puissants des SGBD recents reside dans le systeme des transactions. Une transaction

est un ensemble d'operations \atomiques", c'est-a-dire indivisible. Nous considererons qu'un ensemble d'operations est

indivisible si une execution partielle de ces instructions poserait des problemes d'integrite dans la base de donnees.

Par exemple, dans le cas d'une base de donnees de gestion de comptes en banque, un virement d'un compte a un autre

se fait en deux temps : crediter un compte d'une sommes, et debiter un autre de la m^eme sommes. Si une erreur

survient pendant la deuxieme operation, et que la transaction est interrompue, le virement est incomplet et le patron

va vous assassiner.

Il convient donc de disposer d'un mecanisme permettant de se proteger de ce genre de desagrement. Plut^ot que

se casser la t^ete a tester les erreurs a chaque etape et a balancer des instructions permettant de \revenir en arriere",

nous allons utiliser les instructionsCOMMITetROLLBACK. Voici le squelette d'un exemple :/instructions/IF/erreur/THENROLLBACK;ELSE

COMMIT;END;LeROLLBACKannule toutes les modications faites depuis le debut de la transaction (donc depuis le precedent

COMMIT),COMMITles enregistre denitivement dans la base de donnees.

La variable d'environnementAUTOCOMMIT, qui peut ^etre positionnee aONou aOFFpermet d'activer la gestion des

transactions. Si elle est positionnee aON, chaque instruction a des repercussions immediates dans la base, sinon, les

modications ne sont eectives qu'une fois qu'unCOMMITa ete execute. 9

1.4 Exceptions

Le mecanisme desexceptionsest implemente dans la plupart des langages recent, notament orientes objet. Cette

facon de programmer a quelques avantages immediats :

{obliger les programmeurs a traiter les erreurs :combien de fois votre prof de C a hurle en vous suppliant

de verier les valeurs retournees par unmalloc, ou unfopen? La plupart des compilateurs des langages a

exceptions(notamment java) ne compilent que si pour chaque erreur potentielle, vous avez prepare un bloc de

code (eventuellement vide...) pour la traiter. Le but est de vous assurer que vous n'avez pas oublie d'erreur.

{Rattraper les erreurs en cours d'execution :Si vous programmez un systeme de securite de centrale

nucleaire ou un pilote automatique pour l'aviation civile, une erreur de memoire qui vous acherait l'ecran

bleu de windows, ou le message \Envoyer le rapport d'erreur?", ou plus simplement le fameux \Segmentation

fault" produirait un eet des plus mauvais. Certaines erreurs d'execution sont rattrapables, autrement dit, il est

possible de resoudre le probleme sans interrompre le programme.

{Ecrire le traitement des erreurs a part :Pour des raisons abilite, de lisibilite, il a ete considere que

melanger le code \normal" et le traitement des erreurs etait un style de programmation perfectible... Dans les

langages a exception, les erreurs sont traitees a part.

1.4.1 Rattraper une exception

Je vous ai menti dans le premier cours, un bloc enPL/SQLa la forme suivante :DECLARE /declarations/BEGIN /instructions/EXCEPTION

/traitementd ese rreurs/END;Une exception est une \erreur type", elle porte un nom, au m^eme titre qu'une variable a une identicateur, par

exempleGLUBARF. Lorsque dans les instructions, l'erreurGLUBARFse produit, le code duBEGINs'interrompt et le

code de la sectionEXCEPTIONest lance. On dit aussi que quand une exception estlevee(raised) (on dit aussijetee

(thrown)), on larattrape(catch) dans le blocEXCEPTION. La sectionEXCEPTIONa la forme suivante :EXCEPTION

WHENE1THEN/traitement/WHENE2THEN/traitement/WHENE3THEN/traitement/WHENOTHERSTHEN/traitement/END;On enumere les erreurs les plus pertinentes en utilisant leur nom et en consacrant a chacune d'elle un traitement

particulier pour rattraper (ou propager) l'erreur. Quand un bloc est traite, lesWHENsuivants ne sont pas evalues.

OTHERSest l'exception par defaut,OTHERSest toujours verie, sauf si un cas precedent a ete verie. Dans l'exemple

suivant :DECLARE /declarations/BEGIN /instructions/COMMIT;EXCEPTION

WHENGLUBARFTHENROLLBACK;DBMS_OUTPUT.PUT_LINE('GLUBARFe xceptionr aised! ' );WHENOTHERSTHENDBMS_OUTPUT.PUT_LINE('SQLCODE= ' j jSQLCODE);DBMS_OUTPUT.PUT_LINE('SQLERRM= ' j jSQLERRM);

10

END;Les deux variables globalesSQLCODEetSQLERRMcontiennent respectivement le code d'erreur Oracle et un message

d'erreur correspondant a la derniere exception levee. Chaque exception a donc, en plus d'un nom, un code et un

message.

1.4.2 Exceptions predenies

Bon nombre d'exceptions sont predenies par Oracle, par exemple {NODATAFOUNDest levee quand la requ^ete d'une instruction de la formeSELECT ... INTO ...ne retourne aucune ligne

{TOOMANYROWSest levee quand la requ^ete d'une instruction de la formeSELECT ... INTO ...retourne plusieurs

lignes

{DUPVALONINDEXest levee si une insertion (ou une modication) est refusee a cause d'une contrainte d'unicite.

On peut enrichir notre exemple de la sorte :DECLARE numNUMBER;nomVARCHAR2(30) :='PoupeeB atman' ;BEGIN

SELECTnumprodINTOnumFROMPRODUITWHEREnomprod=nom;DBMS_OUTPUT.PUT_LINE('L'' a rticle' j jnomj j'a p ourn umero' j jnum);EXCEPTION

WHENNO_DATA_FOUNDTHENDBMS_OUTPUT.PUT_LINE('Aucuna rticlen ep ortel en om' j jnom);WHENTOO_MANY_ROWSTHENDBMS_OUTPUT.PUT_LINE('P lusieursa rticlesp ortentl en om' j jnom);WHENOTHERSTHENDBMS_OUTPUT.PUT_LINE('I ly a u ng rosp robleme. . . ' );END;/

SELECT numprod INTO num...leve une exception si la requ^ete renvoie un nombre de lignes dierent de 1.

1.4.3 Codes d'erreur

Je vous encore menti, certaines exceptions n'ont pas de nom. Elle ont seulement un code d'erreur, il est conseille

de se reporter a la documentation pour les obtenir. On les traite de la facon suivanteEXCEPTION WHENOTHERSTHENIF SQLCODE=CODE1THEN/traitement/ELSIF SQLCODE=CODE2THEN/traitement/ELSE

DBMS_OUTPUT.PUT_LINE('J' ' v oisp asc ' ' quec apeute tre. . . ' );END;C'est souvent le cas lors de violation de contraintes.

1.4.4 Declarer et lancer ses propres exceptions

Exception est un type, on declare donc les exceptions dans une section DECLARE. Une exception se lance avec

quotesdbs_dbs14.pdfusesText_20
[PDF] exercices corrigés pompes centrifuges pdf

[PDF] exercices corrigés processus de poisson

[PDF] exercices corrigés programmation evenementielle vb

[PDF] exercices corrigés programmation linéaire méthode du simplexe

[PDF] exercices corrigés programmation matlab pdf

[PDF] exercices corrigés proportionnalité 4ème pdf

[PDF] exercices corrigés propriétés colligatives

[PDF] exercices corrigés propriétés mécaniques des matériaux pdf

[PDF] exercices corrigés rapidité de modulation

[PDF] exercices corrigés rapprochement bancaire pdf

[PDF] exercices corrigés résistance des matériaux

[PDF] exercices corrigés sage comptabilité

[PDF] exercices corrigés sage saari comptabilité 100

[PDF] exercices corrigés saponification

[PDF] exercices corrigés sciences industrielles mpsi pdf