Cours-NFA011
90 pages
Français
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres
90 pages
Français
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres

Description

‹‹„‹„‹‹„‹‹‹‹‹CNAM Paris - NFA011 23/12/2010Développement d’applications avec les bases de donnéesMichel Crucianuhttp://cedric.cnam.fr/~crucianm/abd.html23 décembre 2010 NFA011 1Contenu du coursPL/SQLVariables, structures de contrôleCurseurs, interaction avec la baseSous-programmes, paquetagesExceptionsTransactionsDéclencheurs (triggers)JDBCGénéralitésConnexion à une baseInteraction avec la base, curseursProcédures stockées, procédures externesRelationnel ↔ objet23 décembre 2010 NFA011 2M. Crucianu 1„„„„„CNAM Paris - NFA011 23/12/2010BibliographieBales, D.K. Java programming with Oracle JDBC. O’Reilly, 2002.Bizoi, R. PL/SQL pour Oracle 10g, Eyrolles. 2006.èmeDate, C. Introduction aux bases de données. Vuibert, 2004 (8 édition).Gardarin, G. Bases de données, Eyrolles. 2003.Reese, G. JDBC et Java : guide du programmeur. O’Reilly, 2001.èmeSoutou, C. SQL pour Oracle. Eyrolles, 2008 (3 édition).→ Suite : NSY135 Applications orientées données - patrons, frameworks, ORM23 décembre 2010 NFA011 3PL/SQLProcedural Language / Structured Query Language(PL/SQL ) : langage propriétaire OracleSyntaxe de PL/SQL inspirée du langage AdaD’autres éditeurs de SGBDR utilisent des langages procéduraux similairesPL/SQL n’est pas très éloigné du langage normalisé Persistent Stored Modules (PSM)Documentation Oracle (en anglais) :http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96624/toc.htm23 décembre 2010 NFA011 4M. Crucianu ...

Informations

Publié par
Nombre de lectures 171
Langue Français

Extrait

CNAM Paris - NFA011
M. Crucianu
Développement d’applications avec les bases de données
23 décembre 2010
Michel Crucianu http://cedric.cnam.fr/~crucianm/abd.html
Contenu du cours
„
„
„
NFA011
PL/SQL ‹Variables, structures de contrôle ‹Curseurs, interaction avec la base ‹Sous-programmes, paquetages ‹Exceptions ‹Transactions ‹Déclencheurs (triggers) JDBC ‹Généralités ‹Connexion à une base ‹Interaction avec la base, curseurs ‹Procédures stockées, procédures externes Relationnelobjet
23 décembre 2010
NFA011
1
2
23/12/2010
1
CNAM Paris - NFA011
M. Crucianu
Bibliographie
Bales, D.K.Java programming with Oracle JDBC. O’Reilly, 2002.
Bizoi, R.PL/SQLpourOracle 10g, Eyrolles. 2006.
Date, C.Introduction aux bases de données. Vuibert, 2004 (8èmeédition).
Gardarin, G.Bases de données, Eyrolles. 2003.
Reese, G.et Java : guide du programmeurJDBC . O’Reilly, 2001.
Soutou, C.SQL pour Oracle. Eyrolles, 2008 (3èmeédition).
Suite : NSY135 Applications orientées données - patrons, frameworks, ORM
23 décembre 2010
PL/SQL
NFA011
„ProceduralLanguage/Structured Query Language (PL/SQL ) : langagepropriétaireOracle „de PL/SQL inspirée du langage AdaSyntaxe „D’autres éditeurs de SGBDR utilisent des langages procéduraux similaires „n’est pas très éloigné du langage normaliséPL/SQL Persistent Stored Modules(PSM) „Documentation Oracle (en anglais) : http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96624/toc.htm
23 décembre 2010
NFA011
3
4
23/12/2010
2
CNAM Paris - NFA011
M. Crucianu
Quel est l’intérêt de PL/SQL ?
„La nature relationnelle, déclarative de SQL rend l’expression des requêtes très naturelle … mais les applications complexes exigent plus : ‹Pour lafacilité et l’efficacité de développement: gérer le contexte et lier entre elles plusieurs requêtes, créer des librairies de procédures cataloguées réutilisables ‹Pour l’efficacité de l’application: diminuer le volume des échanges entre client et serveur (un programme PL/SQL est exécuté sur le serveur) Nécessité d’étendre les fonctionnalités de SQL : PL/SQL est une extension procédurale
23 décembre 2010
NFA011
Structure d’un programme
„
Programme PL/SQL =bloc(procédure anonyme, procédure nommée, fonction nommée) :
DECLARE -- section de déclarations -- sectionoptionnelle … BEGIN -- traitement, avec d’éventuelles directives SQL -- sectionobligatoire … EXCEPTION -- gestion des erreurs retournées par le SGBDR -- sectionoptionnelle … END; /lance l’exécution sous SQL*Plus
23 décembre 2010
NFA011
5
6
23/12/2010
3
CNAM Paris NFA011 -
M. Crucianu
Structure d’un programme (2)
„
„
Blocs i
DECLA
BEGIN
EXCEP
END;
DECLAR…E IN BEG… E XCEPT…IO END;
DECLAR…E BEGIN… EXCEPTION … END;
DECLAR…E E IN B G … EXCEPTI…ON END;
Portée d’un identificateur : un descendant peut accéder aux identificateurs déclarés par un parent, pas l’inverse
23 décembre 2010
NFA011
Identificateurs, commentaires
„
„
Identificateur (variable, curseur, exception, etc.) : ‹Commence par une lettre ‹contenir : lettres, chiffres, $, #, _Peut ‹Interdits : &, -, /,espace ‹Jusqu’à 30 caractères ‹Insensible à la casse ! (nompilote = NomPILOTE)
Commentaires : -- Commentaire sur une seule ligne /* Commentaire sur plusieurs lignes */
23 décembre 2010
NFA011
7
8
23/12/2010
4
CNAM Paris - NFA011
M. Crucianu
Variables
„
„
„
Types de variables PL/SQL : ‹Scalaires : par exempleNUMBER(5,2), VARCHAR2, DATE, BOOLEAN, … ‹Composites :%ROWTYPE, RECORD, TABLE ‹Référence :REF ‹LOB (Large Object4 Go ; pointeur si externe)jusqu’à Un programme PL/SQL peut également manipuler des variables non PL/SQL : ‹de substitution ou globales définies dans SQL*PlusVariables ‹Variables hôtes (définies dans d’autres programmes et utilisées par le programme PL/SQL) Toute variable PL/SQL doitobligatoirementêtre déclarée dans une sectionDECLAREavant utilisation
23 décembre 2010
NFA011
Variables scalaires
„
„
„
9
Syntaxe de déclaration : Identificateur [CONSTANT] type [[NOT NULL] {:= | DEFAULT} expression]; ‹CONSTANT: c’est une constante (sa valeur ne peut pas changer,doitêtre initialisée lors de la déclaration) ‹NOT NULL: on ne peut pas lui affecter une valeur nulle (en cas de tentative, une exceptionVALUE ERRORest levée) _ ‹Initialisation : affectation:=ouDEFAULT Pas de déclaration multiple dans PL/SQL ! number1, number2 NUMBER;déclaration incorrecte ! Autre possibilité pour affecter une valeur à une variable SELECT …INTOidentificateur FROM … ;
23 décembre 2010
NFA011
10
23/12/2010
5
Nom Durand Dupont
pilote : Matricule 1 2
vol : Numvol AL12 AF8
23 décembre 2010
Salaire 28004 11758
Age 45 24
Heure_depart 08-18 11-20
Ville Cannes Touquet
Entrepot Garches Lille
Type A400 B200
Capacite 25 75
avion : Numav 14 345
Ville arrivee _ Lille Rio
Ville_depart Paris Paris
_ Heure arrivee 09-12 23-54
Base pour les exemples
23 décembre 2010
„
NFA011
NFA011
Nouveaux types PL/SQL
6
„
Nouveaux types prédéfinis : BINARY_INTEGER: entiers signés entre –231et 231 _ –2ers g31et 231; plus performant PLS INTEGER entre si nés: enti queNUMBERetBINARY_p INTEGERau niveau des o érations arithmétiques ; en cas de dépassement, exception levée Sous-types PL/SQL : restriction d’un type de base ‹Prédéfinis :CHARACTER, INTEGER, NATURAL, POSITIVE, FLOAT, SMALLINT, SIGNTYPE, etc. ‹: précision ou taille maximale) :Utilisateur (restriction SUBTYPE nomSousType IS typeBase [(contrainte)] [NOT NULL]; ‹Exemple de sous-type utilisateur : SUBTYPE numInsee IS NUMBER(13) NOT NULL;
12
11
23/12/2010
M. Crucianu
CNAM Paris - NFA011
CNAM Paris - NFA011
M. Crucianu
Variables scalaires : exemple
DECLARE villeDepart CHAR(10) := ‘Paris’; villeArrivee CHAR(10); numVolAller CONSTANT CHAR := ‘AF8’; numVolRetour CHAR(10); BEGIN SELECT Ville arriveeINTOvilleArrivee FROM vol _ WHERE Numvol = numVolAller; -- vol aller numVolRetour := ‘AF9’; INSERT INTO vol VALUES (numVolRetour, NULL, NULL, villeArrivee, villeDepart); -- vol retour END;
23 décembre 2010
Conversions
„
„
NFA011
Conversions implicites : ‹Lors du calcul d’une expression ou d’une affectation ‹Si la conversion n’est pas autorisée (voir page suivante), une exception est levée Conversions explicites :
De A
CHAR
NUMBER
DATE
RAW
ROWID
23 décembre 2010
CHAR
TO CHAR _
TO CHAR _
RAWTOHEX
ROWIDTOHEX
NUMBER
TO NUMBER _
NFA011
DATE
TO DATE _
_ TO DATE
RAW
HEXTORAW
ROWID
CHARTOROWID
13
14
23/12/2010
7
OUI
OUI
OUI
LONG
OUI
OUI
ROWID
OUI
Quelques conversions implicites
CHAR
OUI
OUI
OUI
OUI
CHAR
De A
OUI
LONG
RAW
DATE
OUI
OUI OUI
VARCHAR2
BINARY INTEGER_NUMBER
OUI
OUI
OUI
OUI
OUI
OUI
OUI
NUMBER
15
8
16
23 décembre 2010
NFA011
OUI
OUI
DATE
OUI
RAW
ROWID
OUI
OUI
OUI
OUI
OUI
OUI
OUI
OUI
„
23 décembre 2010
Déclaration%TYPE
Cette propagation du type permet de réduire le nombre de changements à apporter au code PL/SQL en cas de modification des types de certaines colonnes
VARCHAR2
OUI
NFA011
_ BINARY INTEGER
23/12/2010
Déclarer une variable demême type que ‹Unecolonne(attribut) d’une table existante : nomNouvelleVariable NomTable.NomColonne%TYPE [{:= | DEFAULT} expression]; ‹Uneautre variable, déclarée précédemment : nomNouvelleVariable nomAutreVariable%TYPE [{:= | DEFAULT} expression];
„
CNAM Paris - NFA011
M. Crucianu
CNAM Paris - NFA011
M. Crucianu
Déclaration%TYPE: exemple
DECLARE nomPilote pilote.Nom%TYPE; /* table pilote, colonne nom / * nomCoPilote nomPilote%TYPE; BEGIN … SELECT Nom INTO nomPilote FROM pilote WHERE matricule = 1; SELECT Nom INTO nomCoPilote FROM pilote WHERE matricule = 2; … END;
23 décembre 2010
NFA011
Variables%ROWTYPE
„
„
„
„
17
Déclarer une variable composite dumême type que les tuplesd’une table : nomNouvelleVariable NomTable%ROWTYPE; Les composantes de la variables composite, identifiées pareolnnmooCeln.riableVauvelomNon, sont du même type que les colonnes correspondantes de la table Les contraintesNOT NULLdéclarées au niveau des colonnes de la table ne sont pas transmises aux composantes correspondantes de la variable ! Attention, on peut affecterun seul tupleà une variable définie avec%ROWTYPE!
23 décembre 2010
NFA011
18
23/12/2010
9
CNAM Paris - NFA011
M. Crucianu
Variables%ROWTYPE: exemple
DECLARE piloteRecord pilote%ROWTYPE; agePilote NUMBER(2) NOT NULL := 35; BEGIN piloteRecord.Age := agePilote; piloteRecord.Nom := ‘Pierre’; piloteRecord.Ville := ‘Bordeaux’; piloteRecord.Salaire := 45000; INSERT INTO pilote VALUES piloteRecord; END;
23 décembre 2010
VariablesRECORD
„
„
NFA011
Déclarer une variable composite personnalisée (similaire àstructen C) : TYPE nomTypeRecord IS RECORD (nomChamp typeDonnee [[NOT NULL] {:= | DEFAULT} expression] [, nomChamp typeDonnee …]…); … nomVariableRecord nomTypeRecord;
Les composantes de la variables composite peuvent être des variables PL/SQL de tout type et sont identifiées parrd.nRecoampomChmonelbairaV
23 décembre 2010
NFA011
19
20
23/12/2010
10
CNAM Paris - NFA011
M. Crucianu
VariablesRECORD: exemple
DECLARE TYPE aeroport IS RECORD (ville CHAR(10), distCentreVille NUMBER(3), capacite NUMBER(5)); ancienAeroport aeroport; nouvelAeroport aeroport; BEGIN ancienAeroport.Ville := ‘Paris’; ancienAeroport.DistCentreVille := 20; ancienAeroport.Capacite := 2000; nouvelAeroport := ancienAeroport; END;
23 décembre 2010
VariablesTABLE
NFA011
21
„Définir des tableaux dynamiques (dimension initiale non précisée) composés d’une clé primaire et d’une colonne de type scalaire,%TYPE,%ROWTYPEouRECORD TYPE nomTypeTableau IS TABLE OF {typeScalaire | variable%TYPE | table.colonne%TYPE | table%ROWTYPE | nomTypeRecord} [NOT NULL] [INDEX BY BINARY INTEGER]; _ nomVariableTableau nomTypeTableau; „SiINDEX BY BINARY INTEGERest présente, l’index peut _ être entre–231et 231(typeBINARY_INTEGER)! „FonctionsPL/SQL dédiées aux tableaux :EXISTS(x), PRIOR(x), NEXT(x), DELETE(x,…), COUNT, FIRST, LAST, DELETE 23 décembre 2010 NFA011 22
23/12/2010
11
  • Univers Univers
  • Ebooks Ebooks
  • Livres audio Livres audio
  • Presse Presse
  • Podcasts Podcasts
  • BD BD
  • Documents Documents