Programmation Procédurale Avec SQL
Programmation Procédurale Avec SQL
Programmation Procédurale Avec SQL
avec SQL
Didier DONSEZ
Université de Valenciennes
Institut des Sciences et Techniques de Valenciennes
[email protected]
1
Motivations (i)
■ Limites de SQL
• Langage déclaratif (non procédural)
• facile d ’exprimer des requêtes
• MAIS pas de structure de contrôle
boucle itérative, contrôle séquentiel
SQL Procédural, 2
Motivations (ii)
■ Besoins
• Procédure
• variables locales
• structures de contrôle
boucle itérative, test, exception
• parcours du résultat d ’une requête ligne à ligne
curseur
imbrication des parcours (curseurs imbriqués)
• Exécution
• par le client / par le serveur
■ Curseur
Didier Donsez, 1998-2000
■ SQL Dynamique
• Interface SQL/CLI et Middleware ODBC et JDBC
■ « SQL Procédural »
Didier Donsez, 1998-2000
SQL Procédural, 4
Remarque 1:
Problème de l ’Impedance Mismatch
Logique à 3 niveaux
Didier Donsez, 1998-2000
■
758(81.12:)$/6(
18// 18//,681.12:
SQL Procédural, 5
Remarque 2:
Risques de la programmation procédurale
SQL Procédural, 6
Interface SQL/CLI
et Middleware ODBC et JDBC
■Motivations
■Dynamic SQL
■SQL/CLI
■ODBC
■JDBC
■DBIpour PERL
7
■Avantages et Inconvénients
Motivations
■ 2 formes
• Dynamic SQL
• utilisation de sections (proche d’Embedded SQL)
nécessite un précompilateur
• SQL/CLI
Didier Donsez, 1998-2000
SQL Procédural, 8
Dynamic SQL
• Requêtes SQL
• chaîne de caractères décrivant la requête SQL
• la requête est analysée (35(3$5() à l ’exécution
puis exécutée ((;(&87()
- Erreur de Syntaxe
- + Absence de la source de données
+ Génération automatique de requêtes
■ Exemple en C
(;(&64/%(*,1'(&/$5(6(&7,21
FKDUUHTXHWH>0$;B48(5<B/(1*7+@
(;(&64/(1''(&/$5(6(&7,21
ZKLOH^ SULQWI?Q1RXYHOOHUHTXrWHVFDQIVUHTXHWH
Didier Donsez, 1998-2000
(;(&64/35(3$5(T)520UHTXHWH
(;(&64/(;(&87(T
SULQWI?Q1RXYHOOHUHTXrWHVFDQIVUHTXHWH
(;(&64/(;(&87(,00(',$7(UHTXHWH
` SQL Procédural, 9
L ’interface SQL/CLI
SQL Procédural, 10
Les Middlewares SQL/CLI
■ Plusieurs Offres
• ODBC Open DataBase Connectivity (MicroSoft) SQL/CLI
• JDBC Java DataBase Connectivity (JavaSoft) SQL/CLI
• IDAPI Integrated Database Application Interface (Borland)
• DAL Data Access Language (DEC/Apple)
• DRDA Distributed Remote Database Access (IBM/XOpen)
• SQL*Net (Oracle)
A
U P
Adapteur IDAPI fichiers
T P
pour DBase locaux
L
I I I
L C
Adapteur IDAPI
A API D Serveur
I T ORACLE
S I A pour SQL*Net TCP/IP
Didier Donsez, 1998-2000
O
A N P Adapteur Driver ODBC
T S
E I IDAPI pour Oracle
U Outils pour Driver ODBC fichiers
R Interactif locaux
ODBC pour MSAccess
SQL Procédural, 11
ODBC Open DataBase Connectivity
■ Objectif
• Le "MiddleWare" offre une interface unique d'accéder aux
données quelque soit le format, la localisation, ...
• Indépendance Application / Serveurs BD
(MultiVendeurs)
■ Principes
• abstractions/concepts de SQL/CLI (ISO et ANSI)
• API MS Windows pour manipuler des Tables SQL
• dans des fichiers locaux
Didier Donsez, 1998-2000
■ Architecture Modulaire
• utilisant des drivers d ’adaptation
• au format de la source de données
• au moyen d ’accès (protocole réseau, fichier local)
6HUYHXU2UDFOH
A SQL/NET
U P
TCP/IP
T P Base
I
L Driver ODBC Distante
I
pour Oracle
L C
A
API O
I
S
T
I
D Driver ODBC SGF Fichier
pour MS Access Local
A
O
N
B
ISO 7816-7
T S
C
Didier Donsez, 1998-2000
Driver ODBC L
E pour CQL E &DUWH*(0[&26
C
U Outils T
E Base
R Interactifs U CQL
R
SQL Procédural, 13
Didier Donsez, 1998-2000
Configuration des sources ODBC
SQL Procédural, 14
MicroSoft ADO ActiveX Data Objet
■ Composant ActiveX
Didier Donsez, 1998-2000
SQL Procédural, 15
ADO dans un ASP (i)
Parcours d ’une table avec un curseur
#/$1*8$*( -6FULSW!
LQFOXGHILOH DGRMDYDVLQF!
+70/!+($'!7,7/(!5HTXrWH6LPSOH7,7/(!+($'!%2'<!
K!/LVWHGHV$XWHXUVK!KU!
YDUFXU'LU 6HUYHU0DS3DWK??LLVVDPSOHV??VGN??DVS??GDWDEDVH??DXWKRUVPGE
YDUR&RQQ 6HUYHU&UHDWH2EMHFW$'2'%&RQQHFWLRQ
R&RQQ2SHQ'%4 FXU'LU'ULYHU ^0LFURVRIW$FFHVV'ULYHU
PGE`
'ULYHU,G ),/ 06$FFHVV
YDUR5V R&RQQ([HFXWH6(/(&7
)URPDXWKRUV
!
7$%/(ERUGHU !
ZKLOHR5VHRI^!
WU!
IRU,QGH[ ,QGH[R5VILHOGVFRXQW,QGH[^!
7'9$OLJQ WRS! R5V,QGH[!7'!
`!
WU!
Didier Donsez, 1998-2000
R5V0RYH1H[W
`!
7$%/(!
R5VFORVHR&RQQFORVH!
%2'<!+70/!
SQL Procédural, 16
ADO dans un ASP (ii)
Ajout et Suppression d ’une ligne
K!6XSSUHVVLRQHW$MRXWG¶XQDXWHXUK!KU!
«
R5V 6HUYHU&UHDWH2EMHFW$'2'%5HFRUGVHW
R5V$FWLYH&RQQHFWLRQ R&RQQ
R5V6RXUFH 6(/(&7
)520DXWKRUV:KHUH
R5V&XUVRU7\SH DG2SHQ6WDWLFR5V/RFN7\SH DG/RFN2SWLPLVWLF
R5V2SHQR5V$GGQHZ
R5V$XWKRU9DOXH -RKQ6WHLQEHFN
R5V<HDU%RUQ9DOXH
R5V8SGDWH
5HVSRQVH:ULWHS!$XWHXU,QVHUpR5V$XWKRUR5V<HDU%RUQR5V&ORVH
R5V 6HUYHU&UHDWH2EMHFW$'2'%5HFRUGVHW
R5V$FWLYH&RQQHFWLRQ R&RQQ
R5V6RXUFH 6(/(&7
)520DXWKRUV:+(5(<HDU%RUQ DQG$XWKRU
-RKQ6WHLQEHFN
Didier Donsez, 1998-2000
!
,'GHO
DXWHXU 5HVSRQVH:ULWHR5VDXBLG!%5!
%2'<!+70/!
SQL Procédural, 18
JDBC Java DataBase Connectivity
■ Motivations
• API Java pour manipuler des Tables SQL
• dans des fichiers locaux
• servies par un serveur BD
• une seule API uniforme
pour tous les SGBDs (relationnels)
• abstractions/concepts de X/Open SQL Call Level Intf
• Même principe que les Middlewares comme ODBC
Didier Donsez, 1998-2000
Architecture JDBC
en Java
Driver JDBC Serveur
JDBC pour SQL*Net ORACLE
TCP/IP
Mng
Pont Driver ODBC
Appli 2
JDBC pour Oracle
Didier Donsez, 1998-2000
Serveur BD Serveur BD
Drivers JDBC :
pont ODBC vs Middleware
Serveur BD Serveur BD
Classes
■ Package java.sql
■ Interfaces
• DriverManager
• Connection
• Statement
• PreparedStatement
• CallableStatement
• ResultSet
• ResultSetMetaData
• DatabaseMetaData
■ Classes
Didier Donsez, 1998-2000
• DriverManager, DriverPropertyInfo
• Date
• SQLException, SQLWarning, DataTruncation
Connexion JDBC
■ classe java.sql.Connection
■ URL d’une source de données
MGEFVXESURWRFRO!VXEQDPH!
MGEFGFHQDPLQJDFFRXQWVSD\DEOH
MGEFGEQHWZRPEDWMDYDVRIWFRPIUHG
MGEFPVTOGEVYDFPHFRPXVHU
MGEFRGEFTHRU
MGEFRGEFZRPEDW
MGEFRGEFZRPEDW&DFKH6L]H ([WHQVLRQ&DVH /2:(5
Didier Donsez, 1998-2000
DSDVGHVDODLUH
HOVH 6\VWHPRXWSULQWOQVJDJQHI
`UVFORVH
`FDWFK([FHSWLRQH^HSULQW6WDFN7UDFH``
Exemple JDBC (i)
« Curseur », valeur nulle
FODVV(PSOR\H^
SXEOLFVWDWLFYRLGPDLQ6WULQJDUJV>@
WKURZV64/([FHSWLRQ&ODVV1RW)RXQG([FHSWLRQ^WU\^
&ODVVIRU1DPHRUDFOHMGEFGULYHU2UDFOH'ULYHU
6WULQJGEXUO MGEFRUDFOHRFL#
&RQQHFWLRQFRQQ 'ULYHU0DQDJHUJHW&RQQHFWLRQGEXUOWRWRSDVVHPRW
6WDWHPHQWVWPW FRQFUHDWH6WDWHPHQW
5HVXOW6HWUV VWPWH[HFXWH4XHU\
6(/(&7QXPHPSQDPHVDODU\)520(03/2<(
ZKLOHUVQH[W^
6WULQJV UVJHW6WULQJIORDWI UVJHW)ORDWVDODU\
LIUVZDV1XOO 6\VWHPRXWSULQWOQVQ
DSDVGHVDODLUH
Didier Donsez, 1998-2000
FODVV(PSOR\H^
SXEOLFVWDWLFLQWXSGDWH(PSOR\HLQWQXP6WULQJQRP
WKURZV64/([FHSWLRQ&ODVV1RW)RXQG([FHSWLRQ^WU\^
&ODVVIRU1DPHRUDFOHMGEFGULYHU2UDFOH'ULYHU
6WULQJGEXUO MGEFRUDFOHRFL#
&RQQHFWLRQFRQQ 'ULYHU0DQDJHUJHW&RQQHFWLRQGEXUOWRWRSDVVHPRW
FRQQVHW$XWR&RPPLWIDOVH
3UHSDUHG6WDWHPHQWSVWPW FRQQSUHSDUH6WDWHPHQW
SVPWFOHDU3DUDPHWHUV
SVPWVHW1XOOSVPWVHW6WULQJQRPSVPWVHW,QWQXP
Didier Donsez, 1998-2000
LQWQE/LJQHV0RGLILHHV SVPWH[HFXWH8SGDWH
LIQE/LJQHV0RGLILHHV FRQQFRPPLWHOVHFRQQUROOEDFN
`FDWFK([FHSWLRQH^
HSULQW6WDFN7UDFH``
Exemple JDBC (iii)
appel d ’une procédure stockée
FODVV(PSOR\H^
SXEOLFVWDWLFLQWSD\UDLVH&RQQHFWLRQFRQQLQWQXP
WKURZV64/([FHSWLRQ^WU\^
&DOODEOH6WDWHPHQWFVWPW FRQQSUHSDUH&DOO^FDOOVSBSD\UDLVH""`
FVWPWUHJLVWHU2XW3DUDPHWHUMDYDVTO7\SHV,17
SVPWVHW,QWQXP
FVPWH[HFXWH
UHWXUQFVWPWJHW,QW
`FDWFK([FHSWLRQH^
HSULQW6WDFN7UDFH``
Didier Donsez, 1998-2000
Exemple JDBC (iv)
Streams ASCII et Binaires
FODVV(PSOR\H^
SXEOLFVWDWLFYRLGLQIR&RQQHFWLRQFRQQLQWQXP
WKURZV64/([FHSWLRQ^WU\^
6WDWHPHQWVWPW FRQFUHDWH6WDWHPHQW
5HVXOW6HWUV VWPWH[HFXWH4XHU\
6(/(&7QDPHSKRWRFY)520(03/2<(
ZKLOHUVQH[W^
6WULQJV UVJHW6WULQJ
%XIIHUHG5HDGHUFY QHZ%XIIHUHG5HDGHU
QHZ,QSXW6WUHDP5HDGHUUVJHW$VFLL6WUHDPFY
ZKLOHFYUHDG\^RXWSULQWOQFYUHDGOLQH`
%XIIHUHG,QSXW6WUHDPJLI'DWD QHZ%XIIHUHG,QSXW6WUHDP
Didier Donsez, 1998-2000
«
Exemple JDBC (vi)
getObject
«VXLWHGH+70/5HVXOW6HWWR6WULQJ
ZKLOHUVQH[W^
RXWDSSHQG75!
IRULQWL LQXPFROVL^
RXWDSSHQG7+!
2EMHFWREM UVJHW2EMHFWL
RXWDSSHQGREM QXOO" QEVSREMWR6WULQJ
RXWDSSHQG7+!
`
RXWDSSHQG75!
`
Didier Donsez, 1998-2000
RXWDSSHQG7$%/(!
Exemple JDBC (i)
getObject
5HVXOW6HWUV VWPWH[HFXWH4XHU\
6(/(&7QXPHPSQDPHVDODU\)520(03/2<(
ZKLOHUVQH[W^
6WULQJV UVJHW6WULQJ
IORDWI UVJHW)ORDWVDODU\
LIUVZDV1XOO«HOVH«ZDV1XOOWHVWHVLODGHUQLqUHYDOHXUHVW18//
`
«
ZKLOHUVQH[W^DOWHUQDWLYHDYHFJHW2EMHFW
2EMHFWREM
REM UVJHW2EMHFW6WULQJV REMWR6WULQJ
Didier Donsez, 1998-2000
SQL Procédural, 34
Correspondance de type SQL-Java (ii)
7\SH-DYD 0pWKRGHUHFRPPDQGpH
Type SQL Type Java UHWRXUQpSDUJHW2EMHFW DXOLHXGHJHW2EMHFW
&+$5 6WULQJ 6WULQJ 6WULQJJHW6WULQJ
9$5&+$5 6WULQJ 6WULQJ 6WULQJJHW6WULQJ
/21*9$5&+$5 6WULQJ 6WULQJ ,QSXW6WUHDP
JHW$VFLL6WUHDP
,QSXW6WUHDP
JHW8QLFRGH6WUHDP
%,1$5< E\WH>@ E\WH>@ E\WH>@JHW%\WHV
9$5%,1$5< E\WH>@ E\WH>@ E\WH>@JHW%\WHV
/21*9$5%,1$5< E\WH>@ E\WH>@ ,QSXW6WUHDP
JHW%LQDU\6WUHDP
'$7( MDYDVTO'DWH MDYDVTO'DWH MDYDVTO'DWHJHW'DWH
7,0( MDYDVTO7LPH MDYDVTO7LPH MDYDVTO7LPHJHW7LPH
Didier Donsez, 1998-2000
SQL Procédural, 35
Les exceptions dans JDBC
SQLException, SQLWarning, DataTruncation
«
WU\^
3UHSDUHG6WDWHPHQWSVWPW FRQQSUHSDUH6WDWHPHQW
SVPWVHW1XOOSVPWVHW6WULQJQRPSVPWVHW,QWQXP
QE/LJQHV0RGLILHHV SVPWH[HFXWH8SGDWH
`
FDWFK'DWD7UXQFDWLRQH^
'HVGRQQpHVRQWpWpWURQTXpHVRQGpFLGHGHQHULHQIDLUH
`
FDWFK64/([FHSWLRQH^
6\VWHPRXWSULQWOQHJHW0HVVDJH
Didier Donsez, 1998-2000
UVILUVW
UVXSGDWH)ORDW6DODU\I UVXSGDWH5RZ
UVDEVROXWH
)ORDWVDO UVJHW)ORDW6DODU\VDO
Didier Donsez, 1998-2000
XSUVXSGDWH)ORDW6DODU\
XSUVXSGDWH5RZ
Didier Donsez, 1998-2000
SQL Procédural, 39
Insertion et suppression
depuis Java
6WDWHPHQWVWPW FRQFUHDWH6WDWHPHQW
5HVXOW6HW7<3(B6&52//B6(16,7,9(5HVXOW6HW&21&85B83'$7($%/(
5HVXOW6HWXSUV VWPWH[HFXWH4XHU\6(/(&7
)520(PSOR\H
XSUVODVW
XSUVGHOHWH5RZ
SQL Procédural, 40
Batch de plusieurs ordres
FRQVHW$XWR&RPPLWIDOVH
6WDWHPHQWVWPW FRQFUHDWH6WDWHPHQW
VWPWDGG%DWFK,16(57,172(PSOR\H9$/8(6
-DFTXHV
I
VWPWDGG%DWFK,16(57,172(PSOR\H9$/8(6
3DXO
I
VWPWDGG%DWFK,16(57,172(PSOR\H9$/8(6
0DULH
18//
LQW>@XSGDWH&RXQWV VWPWH[HFXWH%DWFK FRQFRPPLW
3UHSDUHG6WDWHPHQWSVWPW FRQSUHSDUHG6WDWHPHQW
,16(57,172(PSOR\H9$/8(6"¬""
SVWPWVHW,QWSVWPWVHW6WULQJ
3LHUUH
SVWPWVHW)ORDWI
SVWPWDGG%DWFK
Didier Donsez, 1998-2000
■ SGBDOO et JDBMS
5HVXOW6HWUV VWPWH[HFXWH4XHU\6(/(&7
)520(PSOR\H
UVQH[W
(PSOR\HH (PSOR\HUVJHW2EMHFW
(PSOR\HP QHZ(PSOR\H0DWKLHX
3UHSDUHG6WDWHPHQWSVWPW FRQSUHSDUHG6WDWHPHQW
,16(57,172(PSOR\H(PSOR\HBW9$/8("
SVWPWVHW2EMHFWP
SVWPWH[HFXWH8SGDWH
5HPDUTXHOHE\WHFRGHQ¬·HVWSDVVWRFNpLOIDXWXWLOLVHU&ODVVIRU1DPH
Didier Donsez, 1998-2000
SQL Procédural, 42
Principe de Sécurité de JDBC
Application Applet
fichiers fichiers
JDBC locaux JDBC locaux
cha
rge
me
nt
Serveur BD Serveur BD
Serveur
Didier Donsez, 1998-2000
HTTPD
Utilisation : Servlets (i)
Applet
fichiers
locaux
cha
rge
Invocation
me
CGI
nt
Serveur BD
Servlet HTTPD
(Jeeves,Jigsaw)
JDBC
Didier Donsez, 1998-2000
Utilisation : Servlets (ii)
Applet
fichiers
locaux
cha
rge
Invocation
me
CGI
nt
HTTPD Serveur BD Servlet HTTPD
VHUYOHW (Jeeves,Jigsaw)
GULYHU-'%&
JDBC
Didier Donsez, 1998-2000
Le module DBI de PERL (i)
Accès aux BDs par des scripts PERL
http://www.hermetica.com/technologia/DBI/
XVHVWULFWXVH'%,
P\GEK '%,!FRQQHFW
GEL2UDFOHRUFO
WRWR
SDVVHGHPRW
^5DLVH(UURU !$XWR&RPPLW !`
__GLH'DWDEDVHFRQQHFWLRQQRWPDGH'%,HUUVWU
P\#QDPHV ¬'X0D
P\VTO TT^6(/(&7QDPHVDODU\)520HPSOR\HHV:+(5(QDPH/,.("`
P\VWK GEK!SUHSDUHVTO
IRU#QDPHV^
VWK!ELQGBSDUDPB'%,64/B9$5&+$5VWK!H[HFXWH
P\QRPVDOVWK!ELQGBFROXPQVXQGHI?QRP?VDO
Didier Donsez, 1998-2000
`
LI#^ ZDUQ'DWDEDVHHUURU'%,HUUVWU?QGEK!UROOEDFN`
`
VWK!ILQLVKGEK!GLVFRQQHFW SQL Procédural, 48
Embedded SQL
■Motivations
■Oracle Pro*C
■Informix ESQL
■SQLJ
49
Motivation
■ Précompilation
6RXUFH
6RXUFH
3/
3/
3Up&RPSLODWHXU &RPSLODWHXU
([pFXWDEOH
(64/GDQV3/ RUGUHV64/&/, 3/ Base
RUGUHV64/
LPEULTXpV
Didier Donsez, 1998-2000
LPEULTXpV
RXRUGUHVQDWLIV
MetaBase
SQL Procédural, 50
Embedded SQL
■ Sections spéciales
(;(&64/%(*,1(1''(&/$5(6(&7,21
• pour les déclarations de variables 3GL partagées avec SQL
(;(&64/6(/(&7«,172«
• pour l ’exécution d ’une requête SQL
■ Précompilateurs
• C
• Informix ESQL/C
• Oracle Pro*C
• Java
Didier Donsez, 1998-2000
SQL Procédural, 51
Exemple Pro*C
H[HFXWLRQ?QV?Q
Didier Donsez, 1998-2000
VTOFDVTOHUUPVTOHUUPOVTOFDVTOHUUPVTOHUUPF
HOVH
SULQWIVJDJQHG?QQRPVDODLUH SQL Procédural, 52
Exemple de Curseur en Pro*C
(;(&64/%(*,1'(&/$5(6(&7,21
FKDUQRP>@ IORDWVDODLUH
(;(&64/(1''(&/$5(6(&7,21
(;(&64/'(&/$5(F&85625)25
6(/(&7QDPHVDODU\)520(PSOR\H:+(5(VDODU\!
(;(&64/23(1&85625F
ZKLOH^
(;(&64/)(7&+F,172QRPVDODLUH
Didier Donsez, 1998-2000
(;(&64/'(&/$5(FXUVHPS&85625)25
6(/(&7QDPHVDODU\,172QRPVDOQXOOBIODJ
)520(PSOR\H)520LWHPV
)255($'21/<
(;(&64/23(1FXUVHPS
ZKLOH64/&2'( ^
(;(&64/)(7&+FXUVHPS
LI64/&2'(
LIQXOOBIODJ SULQWIGJDJQHULHQ?QQRP
HOVH SULQWIVJDJQHG?QQRPVDO
Didier Donsez, 1998-2000
`
(;(&64/&/26(FXUVHPS
SQL Procédural, 56
SQLJ - SQL Java
SQL Procédural, 57
SQLJ - Itérateurs
• Notion de curseur
VTOSXEOLFLWHUDWRU,WHU(PS6WULQJLQWGpFODUDWLRQG¶XQHFODVVHG¶LWpUDWHXU
^
,WHU(PSLWHUGpFODUDWLRQG¶XQREMHWLWpUDWHXU
6WULQJQRPLQWVDOLQWF
VTOLWHU ^6(/(&7QDPHVDODU\)520(PSOR\H`
ZKLOHWUXH^
VTO^)(7&+LWHU,172QRPVDO`
LILWHUHQG)HWFKEUHDN
LIF6\VWHPRXWSULQWOQQRPHVWSD\pVDO
`
LWHUVHW5RZVHUHSRVLWLRQQHDXSUHPLHUUpVXOWDW
Didier Donsez, 1998-2000
VTOLWHU UV
ZKLOHLWHUQH[W^
6\VWHPRXWSULQWOQLWHUQDPHHVWSD\pLWHUVDODU\
` SQL Procédural, 60
JavaBlend
■ Mapping transparent
d ’objets Java avec les lignes d ’une base
relationnelle
• Utilise l ’ODL de l ’ODMG pour la description
Didier Donsez, 1998-2000
SQL Procédural, 61
SQL « Procédural »
■Motivations
■Architecture
■SQL3 / PSM
■Informix SPL
■Oracle PL/SQL
■Un nouveau venu : Java
62
Motivations
pour un SQL procédural
■ Inconvénients
• Dynamic SQL et Middleware SQL (ODBC, JDBC, ...)
requête vérifiée à l ’exécution (runtime)
typage faible variable hôte et curseur
• Embedded SQL in 3GL
• précompilation
■ Dans les deux cas
• « impedance mismatch »
• code procédural du coté client (coût réseau)
Didier Donsez, 1998-2000
SQL
%HJLQ
SQL Serveur BDR
)RUL WR Client SQL
6HOHFW
SQL
SQL
(QG
SQL Procédural, 63
Architecture Client-Serveur
■ Procédure stockée
Moteur Serveur
Didier Donsez, 1998-2000
■ Triggers
SQL
Update,
Delete,
Insert
SQL Procédural, 65
Standard et Langages
■ Le standard
• SQL3 / PSM
■ Les éditeurs
• Informix
• SPL
• Oracle
• PL/SQL
• …
■ Remarque
Didier Donsez, 1998-2000
SQL Procédural, 66
Utilisation dans Oracle
■ Procédures anonymes
• Oracle SQL*PLUS, SQL*DBA
■ Procédures Stockées
■ Actions des Déclencheur Triggers
• Oracle SQL*MENU, SQL*FORMS
Didier Donsez, 1998-2000
SQL Procédural, 67
Bloc (Procédure) anonyme
5XQ SURYRTXHO¶H[pFXWLRQGHODSURFpGXUHDQRQ\PH
SQL Procédural, 68
Typage des Variables
SQL Procédural, 69
Instructions
• Affectation
• Instructions SQL
• Requête
SELECT, INSERT, UPDATE, DELETE
• Transaction
COMMIT, ROLLBACK, SAVEPOINT
• Curseur
DECLARE, OPEN, FETCH, CLOSE, WHERE CURRENT OF
• Structures de Contrôle
imbrication illimitée
• IF...THEN...ELSIF...END IF
• boucles FOR, WHILE, LOOP et EXIT, GOTO
Didier Donsez, 1998-2000
• Exceptions
• Exceptions internes au SGBD ou définies par l ’utilisateur
• Plusieurs niveaux d ’exception
SQL Procédural, 70
Instructions
■ Affectation
<variable> <variable ou expression>
6(/(&7<variable>,172<variable><suite de la clause FROM-WHERE>
■ Test
,)<condition>7+(1<instructions>(1',)
,)<condition>7+(1<instructions>(/6(<instructions>(1',)
,)<condition>7+(1<instructions>(/6(<instructions>
(/6,)<condition>7+(1<instructions>(1',)
■ Boucles
/223<instructions>(;,7:+(1<conditiondesortie>;
<instructions>(1'/223
Didier Donsez, 1998-2000
:+,/(<condition>/223<instructions>(1'/223
)25<variable>,1<valeur>«<valeur>/223<instructions>(1'/223
SQL Procédural, 71
Affection à partir d’une requête
HQG
ZKHQRWKHUVWKHQQXOO
HQG
SQL Procédural, 73
Exceptions (ii)
GHFODUH
HB'HSDVVHPHQW (;&(37,21GpFODUDWLRQG¬·XQHH[FHSWLRQXWLOLVDWHXU
V (PSOR\HVDODU\7<3(
EHJLQ
EHJLQ
VHOHFWVXPVDODU\LQWRVIURP(PSOR\H
LIV!WKHQ
UDLVHHB'HSDVVHPHQW
HQGLI
H[FHSWLRQ
ZKHQHB'HSDVVHPHQW
EHJLQ
5$,6(B$33/,&$7,21B(5525
/DPDVVHVDODULDOHDH[SORVp¶
HQG
ZKHQQRBGDWDBIRXQG
Didier Donsez, 1998-2000
EHJLQ
QRWLILH(UUHXUQXP-DPDLVDWWHLQW
HQG
ZKHQRWKHUVWKHQQXOO
HQG SQL Procédural, 74
Curseurs
■ Déclaration
&85625<nomcur>,6<requête SELECT>
■ Usage
• Ouverture
23(1<nomcur>
• Parcours dans un boucle
• test d’arrêt
(;,7:+(1<nomcur>127)281'
:+,/(<nomcur>)281'/223
• récupération des valeurs dans des variables
)(7&+<nomcur>,172<liste de variables>
Didier Donsez, 1998-2000
• Fermeture
&/26(<nomcur>
SQL Procédural, 75
Exemple de Curseur
&5($7(255(3/$&(352&('85(DXJPHQWDWLRQ6DODLUH
VHXLO ,1(PSOR\HVDODU\7<3(
DXJPHQWDWLRQ ,1180%(5
$6
VDO(PSOR\HVDODU\7<3(
QXP(PSOR\HQXPHPS7<3(
&85625F,66(/(&7VDODU\QXPHPS)520(PSOR\H
%(*,1
23(1F
)(7&+F,172VDOQXPDWWHQWLRQjO¶RUGUHW\SHVFRPSDWLEOHV
:+,/(F)281'/223
,)VDO,612718//$1'VDOVHXLO7+(1
8'3$7((PSOR\H6(7VDODU\ VDODU\
DXJPHQWDWLRQ
:+(5(QXPHPS QXP
(1',)
Didier Donsez, 1998-2000
)(7&+F,172VDOQXP
(1'/223
&/26(F
(1' SQL Procédural, 76
Procédures et Fonctions
■ Plusieurs Types
• Bloc (procédure) anonyme
• envoyé par le client au serveur
• Procédure stockée, Fonction stockée
• stockées sur le serveur
• Procédure membre, Fonction membre
• méthodes membres des types objets
• Procédure externe
• écrit en LG3, utilise l ’API d ’Oracle
OCI : Oracle Call Interface
• peut être invoqué depuis PL/SQL
Didier Donsez, 1998-2000
■ Fonctionnalités générales
• Récursion illimitée
• Surcharge des paramètres
• Passage des paramètres avec des modes ,1287,1287 SQL Procédural, 77
Procédures Stockées
■ Déclaration
&5($7(255(3/$&(352&('85(<nomproc><listarg> $6
GpFODUDWLRQVGHVYDULDEOHVORFDOHVRSWLRQHO
%(*,1 VXLWHG¶LQVWUXFWLRQV3/64/
(;&(37,216 VXLWHG¶LQVWUXFWLRQV3/64/
(1'
5XQ GpFODUDWLRQGHODSURFpGXUHVWRFNpH
■ Liste des Arguments
• nomarg mode type
• mode : ,1, 287 ou ,1287
Didier Donsez, 1998-2000
■ Exemple
&5($7(255(3/$&(352&('85(QRXYHO(PSOR\H
Q,1(PSOR\HQDPH7<3( V,1(PSOR\HVDODU\7<3(
$6%(*,1
,16(57,172(PSOR\H9$/8(QV18//
(1'
581
■ Invocation depuis un bloc anonyme
%(*,1
QRXYHO(PSOR\H
0DUWLQ
QRXYHO(PSOR\H
'XSRQW
Didier Donsez, 1998-2000
(1'
581
SQL Procédural, 79
Fonctions
FUHDWHRUUHSODFHIXQFWLRQJHWBVDOQXPLQ(PSOR\HQXPHPS7<3(
UHWXUQ (PSOR\HVDODU\7<3(LV
V(PSOR\HVDODU\7<3(YDULDEOHORFDOH
EHJLQ
EHJLQ
VHOHFWVDODU\LQWRVIURP(PSOR\HZKHUHQXPHPS QXP
H[FHSWLRQ
ZKHQQRBGDWDBIRXQG
EHJLQ
V QRWLILHU(UUHXUQXP$SSHOG¶XQHDXWUHSURFpGXUH
HQG
ZKHQRWKHUVWKHQQXOO
HQGEORFLPEULTXp
Didier Donsez, 1998-2000
UHWXUQV
HQGIXQFWLRQ
SQL Procédural, 80
Informix SPL
&5($7()81&7,21ILQGBJURXSLG,17
5(7851,1*,175($/
Didier Donsez, 1998-2000
(1')81&7,21
'523352&('85(UDLVHBSULFHV
SQL Procédural, 81
Informix SPL - Imbrication de bloc
&5($7(352&('85(VFRSH
'(),1([\],17
/(7[
/(7\
/(7] [\]LV
%(*,1
'(),1([T,17
'(),1(]&+$5
/(7[
/(7T [\T
/(7]
VLOO\
]UHFHLYHVDFKDUDFWHUYDOXH
(1'
/(7\ [\LVQRZ
Didier Donsez, 1998-2000
/(7[ ]]LVQRZQRW
VLOO\
(1'352&('85(
SQL Procédural, 82
Informix SPL - Curseur
&5($7(B352&('85(LQFUHDVHBE\BSFWSFW,17(*(5
'(),1(V,17(*(5
)25($&+VDOBFXUVRU)25
6(/(&7VDODU\,172V)520HPSOR\HH
:+(5(VDODU\!
/(7V VV
SFW
83'$7(HPSOR\HH6(7VDODU\ V
:+(5(&855(172)VDOBFXUVRU
(1')25($&+
(1'352&('85(
Didier Donsez, 1998-2000
SQL Procédural, 83
Informix SPL - Exception
%(*,1
21(;&(37,21,1
(1'(;&(37,21:,7+5(680(GRQRWKLQJVLJQLILFDQWFRQW
%(*,1
)25L,172
)25($&+VHOHFW,172DD)520W
,)DD7+(1
5$,6((;&(37,21HPHUJHQF\H[LW
(1',)
(1')25($&+
(1')25
5(7851
(1'
GRVRPHWKLQJHPHUJHQF\H[LWWRWKLVVWDWHPHQW
75$&(
1HJDWLYHYDOXHUHWXUQHG
Didier Donsez, 1998-2000
5(7851
(1'
SQL Procédural, 84
Java, Persistance et Bases de Données
L impedance mismatch
• JavaBlend
SQL Procédural, 87
JavaBlend
SQL Procédural, 88
Java coté SGBD
SQL Procédural, 89
Bibliographie - Autre
■ PL/SQL
• Scott Urman , « Oracle8 PL/SQL Programming », ed Osborne-McGraw-
Hill, Oracle Press Series, ISBN 0-07-882305-6.
• Steven Feuerstein, « Oracle PL/SQL Programming »,2nd Edition, ed
O'Reilly. ISBN 1-56592-335-9.
• Steven Feuerstein, « Advanced Oracle PL/SQL Programming with
Packages », ed O'Reilly, ISBN 1-56592-238-7.
• http://technet.oracle.com
■ ADO
• La référence du programmeur ADO 2.0 (mi juin 99), Ed Eyrolles
Didier Donsez, 1998-2000
SQL Procédural, 90
Bibliographie
■ JDBC
• George Reese, « Database Programming with JDBC and Java with
Packages », 1st Edition June 1997, ed O'Reilly, ISBN. 1-56592-270-0
(ISBN 2-84177-042-7 en français)
• un peu incomplet
• S. White, M. Fisher, R. Cattell, G. Hamilton, M. Hapner,
"JDBC API Tutorial and Reference", Ed Addison-Wesley,
ISBN 0-201-63459-7
• très complet
• Robert Orfali, Dan Harkey, « Client/Server Programming with Java and
Corba », 2ème édition, 1998, Ed Wiley, ISBN 0-471-24578-X. Chapitres
23 à 26.
Didier Donsez, 1998-2000
■ Revues
• DBMS Magazine www.dbmsmag.com
• DB2 Magazine www.ibm.com
• Oracle On-line Magazine www.oramag.com
• y sont publiés des « tips » sur PL/SQL
Didier Donsez, 1998-2000
SQL Procédural, 92