Vous êtes sur la page 1sur 88

Programmation Procédurale

avec SQL

Didier DONSEZ
Université de Valenciennes
Institut des Sciences et Techniques de Valenciennes
donsez@univ-valenciennes.fr

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

• Il existe parfois une solution en « pur SQL »


• Exemple du puzzle de Joe Celko
• Certes, il faut se creuser la tête
■ Sinon
Didier Donsez, 1998-2000

• Langage Procédural + SQL

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

• « Pointeur » sur la ligne courante


• Transfert des valeurs
entre la ligne pointée et les variables de la procédure
SQL Procédural, 3
3 Solutions

■ SQL Dynamique
• Interface SQL/CLI et Middleware ODBC et JDBC

■ Embedded SQL in 3GL

■ « SQL Procédural »
Didier Donsez, 1998-2000

SQL Procédural, 4
Remarque 1:
Problème de l ’Impedance Mismatch

■ Typage différent entre SQL et C, C++, Java, ...


• conversion, arithmétique
180%(5 [ ↔ LQW"ORQJ"
'(&,0$/ [\ 180%(5 [\ ↔ IORDW"GRXEOH"
9$5&+$5 [ ↔ FKDU>[@"VWULQJ"
• constructeur de type
■ Les valeurs NULL
• représentent les valeurs manquantes ou non renseignées
• absente des langages hôtes

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

■ La solution SQL pur n ’est pas trivial


• le développeur propose une solution procédurale
• suite de plusieurs requêtes SQL
• le développeur se substitue parfois à l ’optimiseur
■ Exemple
• imbrication de curseurs sur deux tables
• pour réaliser une jointure
Didier Donsez, 1998-2000

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

■ Connexions simultanées vers plusieurs bases


• Consultation et Modification
• La requête n ’est analysée qu’à l ’exécution
• son code SQL peut être généré ou saisis qu’à l ’exécution

■ 2 formes
• Dynamic SQL
• utilisation de sections (proche d’Embedded SQL)
nécessite un précompilateur
• SQL/CLI
Didier Donsez, 1998-2000

• API bas niveau pour les applications

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 ?Q1RXYHOOHUHTXrWH VFDQI VUHTXHWH 
Didier Donsez, 1998-2000

 (;(&64/35(3$5(T)520UHTXHWH
 (;(&64/(;(&87(T
 SULQWI ?Q1RXYHOOHUHTXrWH VFDQI VUHTXHWH 
 (;(&64/(;(&87(,00(',$7(UHTXHWH
` SQL Procédural, 9
L ’interface SQL/CLI

■ CLI : Call Level Interface


• API normalisé par l ’ANSI

■ Evolution dans SQL3, dans Oracle 8, ...


• prise en compte des extensions Objet
Didier Donsez, 1998-2000

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

• servies par des serveurs SGBD Relationnels


en mode Client/Serveur
• plusieurs sources accessibles simultanément
SQL Procédural, 12
Architecture d ’ODBC

■ 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([HFXWH 6(/(&7 )URPDXWKRUV 
!
7$%/(ERUGHU !
ZKLOH R5VHRI ^!
WU!
IRU ,QGH[ ,QGH[ R5VILHOGVFRXQW ,QGH[ ^!
7'9$OLJQ WRS! R5V ,QGH[ !7'!
`!
WU!
Didier Donsez, 1998-2000

R5V0RYH1H[W 
`!
7$%/(!
R5VFORVH R&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
R5V2SHQ R5V$GGQHZ 
R5V $XWKRU 9DOXH -RKQ6WHLQEHFN
R5V <HDU%RUQ 9DOXH 
R5V8SGDWH 
5HVSRQVH:ULWH S!$XWHXU,QVHUpR5V $XWKRU R5V <HDU%RUQ R5V&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

R5V&XUVRU7\SH DG2SHQ)RUZDUG2QO\ R5V/RFN7\SH DG/RFN2SWLPLVWLF


R5V2SHQ R5V'HOHWH R5V8SGDWH 
5HVSRQVH:ULWH S!$XWHXU6XSSULPp3DXO(QILHOG  R5V&ORVH 
!
%2'<!+70/!
SQL Procédural, 17
ADO dans un ASP (iii)
Invocation d ’une Procédure Stockée
#/$1*8$*( -6FULSW!
LQFOXGHILOH DGRMDYDVLQF!
+70/!+($'!7,7/(!,QYRFDWLRQG¶XQHSURFpGXUHVWRFNp7,7/(!+($'!
%2'<!
K!,QYRFDWLRQG¶XQHSURFpGXUHVWRFNpK!KU!

YDUR&RQQ 6HUYHU&UHDWH2EMHFW $'2'%&RQQHFWLRQ 
YDUR&PG 6HUYHU&UHDWH2EMHFW $'2'%&RPPDQG 
R&RQQ2SHQ '61 /RFDO6HUYHU8,' VD3:' '$7$%$6( SXEV 
R&PG$FWLYH&RQQHFWLRQ R&RQQ
R&PG&RPPDQG7H[W ^FDOOE\UR\DOW\ " `
R&PG3DUDPHWHUV$SSHQG R
&PG&UHDWH3DUDPHWHU #3HUFHQWDJHDG,QWHJHUDG3DUDP,QSXW 
R&PG #3HUFHQWDJH  
YDUR5V R&PG([HFXWH 
Didier Donsez, 1998-2000

!
,'GHO
DXWHXU 5HVSRQVH:ULWH R5V DXBLG !%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

■ Composants d’adaptation (Drivers)


• un driver pour chaque SGBD (Oracle, Sybase, ...)
• un driver pour chaque format de fichier (Dbase,Paradox)

Driver JDBC fichiers


Appli 1 pour DBase locaux

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

en Java / Driver ODBC fichiers


locaux
ODBC pour MSAccess
Drivers JDBC

■ 4 types de drivers JDBC


• pur Java
+ DONC téléchargeable
• natif
- installation du driver sur le client
• pont JDBC / ODBC
- installation d’ODBC et des drivers sur le client
+ utilisation des drivers ODBC existants
• serveur Middleware
- encombrement serveur
+ protocole autre que TCP/IP
Didier Donsez, 1998-2000
Drivers JDBC :
pur Java vs Natif

Application / Applet Application / Applet


JDBC Manager JDBC Manager
Driver Java
Driver en pur Java API Native Client BD
(C, C++)
Didier Donsez, 1998-2000

Serveur BD Serveur BD
Drivers JDBC :
pont ODBC vs Middleware

Application / Applet Application / Applet


JDBC Manager JDBC Manager
Driver Java ODBC Driver Java
Client Middleware
Pont JDBC/ODBC (C)
Driver ODBC (C,C++) Serveur Middleware
ODBC Mng
API Client BD
Driver ODBC
Didier Donsez, 1998-2000

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

MGEFRGEFTHRUD8,' NJK3:' IRRH\


MGEF*HP'%-GEF))

Exemple JDBC (i)
« Curseur », valeur nulle
FODVV(PSOR\H^
SXEOLFVWDWLFYRLGPDLQ 6WULQJDUJV>@
WKURZV64/([FHSWLRQ&ODVV1RW)RXQG([FHSWLRQ^WU\^
&ODVVIRU1DPH RUDFOHMGEFGULYHU2UDFOH'ULYHU 
&ODVVIRU1DPH VXQMGEFRGEF-GEF2GEF'ULYHU 
6WULQJGEXUO MGEFRUDFOHRFL#
&RQQHFWLRQFRQQ 'ULYHU0DQDJHUJHW&RQQHFWLRQ GEXUOWRWRSDVVHPRW 
6WDWHPHQWVWPW FRQFUHDWH6WDWHPHQW 
5HVXOW6HWUV VWPWH[HFXWH4XHU\
6(/(&7QXPHPSQDPHVDODU\)520(03/2<( 
ZKLOH UVQH[W ^
6WULQJV UVJHW6WULQJ  IORDWI UVJHW)ORDW VDODU\ 
Didier Donsez, 1998-2000

LI UVZDV1XOO 6\VWHPRXWSULQWOQ VQ

DSDVGHVDODLUH 
HOVH 6\VWHPRXWSULQWOQ VJDJQHI 
`UVFORVH 
`FDWFK ([FHSWLRQH ^HSULQW6WDFN7UDFH ``
Exemple JDBC (i)
« Curseur », valeur nulle
FODVV(PSOR\H^
SXEOLFVWDWLFYRLGPDLQ 6WULQJDUJV>@
WKURZV64/([FHSWLRQ&ODVV1RW)RXQG([FHSWLRQ^WU\^
&ODVVIRU1DPH RUDFOHMGEFGULYHU2UDFOH'ULYHU 
6WULQJGEXUO MGEFRUDFOHRFL#
&RQQHFWLRQFRQQ 'ULYHU0DQDJHUJHW&RQQHFWLRQ GEXUOWRWRSDVVHPRW 
6WDWHPHQWVWPW FRQFUHDWH6WDWHPHQW 
5HVXOW6HWUV VWPWH[HFXWH4XHU\
6(/(&7QXPHPSQDPHVDODU\)520(03/2<( 
ZKLOH UVQH[W ^
6WULQJV UVJHW6WULQJ  IORDWI UVJHW)ORDW VDODU\ 
LI UVZDV1XOO 6\VWHPRXWSULQWOQ VQ

DSDVGHVDODLUH 
Didier Donsez, 1998-2000

HOVH 6\VWHPRXWSULQWOQ VJDJQHI 


`UVFORVH 
`FDWFK ([FHSWLRQH ^
HSULQW6WDFN7UDFH ``
Exemple JDBC (ii)
passage d ’arguments, modification, transaction

FODVV(PSOR\H^

SXEOLFVWDWLFLQWXSGDWH(PSOR\H LQWQXP6WULQJQRP
WKURZV64/([FHSWLRQ&ODVV1RW)RXQG([FHSWLRQ^WU\^
&ODVVIRU1DPH RUDFOHMGEFGULYHU2UDFOH'ULYHU 
6WULQJGEXUO MGEFRUDFOHRFL#
&RQQHFWLRQFRQQ 'ULYHU0DQDJHUJHW&RQQHFWLRQ GEXUOWRWRSDVVHPRW 
FRQQVHW$XWR&RPPLW IDOVH 
3UHSDUHG6WDWHPHQWSVWPW FRQQSUHSDUH6WDWHPHQW


83'$7((PSOR\H6(7VDODU\ "QDPH ":+(5(QXPHPS "


SVPWFOHDU3DUDPHWHUV 
SVPWVHW1XOO  SVPWVHW6WULQJ QRP SVPWVHW,QW QXP 
Didier Donsez, 1998-2000

LQWQE/LJQHV0RGLILHHV SVPWH[HFXWH8SGDWH 
LI QE/LJQHV0RGLILHHV  FRQQFRPPLW HOVHFRQQUROOEDFN 
`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 "" ` 
FVWPWUHJLVWHU2XW3DUDPHWHU MDYDVTO7\SHV,17 
SVPWVHW,QW QXP 
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<( 
ZKLOH UVQH[W ^
6WULQJV UVJHW6WULQJ  
%XIIHUHG5HDGHUFY QHZ%XIIHUHG5HDGHU
QHZ,QSXW6WUHDP5HDGHU UVJHW$VFLL6WUHDP FY 
ZKLOH FYUHDG\ ^RXWSULQWOQ FYUHDGOLQH `
%XIIHUHG,QSXW6WUHDPJLI'DWD QHZ%XIIHUHG,QSXW6WUHDP
Didier Donsez, 1998-2000

QHZ%LQDU\,QSXW6WUHDP UVJHW%LQDU\6WUHDP SKRWR 


ZKLOH OHQ JLI'DWDUHDG EXIEXIOHQJWK   ^
«
`
Exemple JDBC (v)
ResultSetMetaData
FODVV+70/5HVXOW6HW^/LYUH6HUYOHW([S
SULYDWH5HVXOW6HWUV
SXEOLF+70/5HVXOW6HW 5HVXOW6HWUV ^WKLVUV UV`
SXEOLF6WULQJWR6WULQJ ^
6WULQJ%XIIHURXW QHZ6WULQJ%XIIHU RXWDSSHQG 7$%/(! 
5HVXOW6HW0HWD'DWDUVPG UVJHW0HWD'DWD 
LQWQXPFROV UVPGJHW&ROXPQ&RXQW 
RXWDSSHQG 75! 
IRU LQWL LQXPFROVL ^
RXWDSSHQG 7+! DSSHQG UVPGJHW&ROXPQ/DEHO L 
`
RXWDSSHQG 75! 
Didier Donsez, 1998-2000

«
Exemple JDBC (vi)
getObject
«VXLWHGH+70/5HVXOW6HWWR6WULQJ

ZKLOH UVQH[W ^
RXWDSSHQG 75! 
IRU LQWL LQXPFROVL ^
RXWDSSHQG 7+! 
2EMHFWREM UVJHW2EMHFW L 
RXWDSSHQG REM QXOO " QEVSREMWR6WULQJ 
RXWDSSHQG 7+! 
`
RXWDSSHQG 75!
`
Didier Donsez, 1998-2000

RXWDSSHQG 7$%/(! 

Exemple JDBC (i)
getObject
5HVXOW6HWUV VWPWH[HFXWH4XHU\
6(/(&7QXPHPSQDPHVDODU\)520(03/2<( 

ZKLOH UVQH[W ^
6WULQJV UVJHW6WULQJ  
IORDWI UVJHW)ORDW VDODU\ 
LI UVZDV1XOO «HOVH«ZDV1XOO WHVWHVLODGHUQLqUHYDOHXUHVW18//
`
«
ZKLOH UVQH[W ^DOWHUQDWLYHDYHFJHW2EMHFW
2EMHFWREM
REM UVJHW2EMHFW  6WULQJV REMWR6WULQJ 
Didier Donsez, 1998-2000

REM UVJHW2EMHFW VDODU\ 


LI REM QXOO «HOVH^WHVWHVLODYDOHXUHVW18//
)ORDWI  )ORDW REM«SHXWOHYHU&DVW([FHSWLRQ
``
Correspondance de type SQL-Java (i)
7\SH-DYD 0pWKRGHUHFRPPDQGpH
Type SQL Type Java UHWRXUQpSDUJHW2EMHFW DXOLHXGHJHW2EMHFW
180(5,& MDYD0DWK%LJ'HFLPDO MDYD0DWK%LJ'HFLPDO MDYD0DWK%LJ'HFLPDO
JHW%LJ'HFLPDO
'(&,0$/ MDYD0DWK%LJ'HFLPDO MDYD0DWK%LJ'HFLPDO MDYD0DWK%LJ'HFLPDO
JHW%LJ'HFLPDO
%,7 ERROHDQ %RROHDQ ERROHDQJHW%RROHDQ
7,1<,17 E\WH ,QWHJHU E\WHJHW%\WH
60$//,17 VKRUW ,QWHJHU VKRUWJHW6KRUW
,17(*(5 LQWHJHU ,QWHJHU LQWHJHUJHW,QW
%,*,17 ORQJ /RQJ ORQJJHW/RQJ
5($/ IORDW )ORDW IORDWJHW)ORDW
)/2$7 GRXEOH 'RXEOH GRXEOHJHW'RXEOH
'28%/( GRXEOH 'RXEOH GRXEOHJHW'RXEOH
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

7,0(67$03 MDYDVTO7LPHVWDPS MDYDVTO7LPHVWDPS MDYDVTO7LPHVWDPS


JHW7LPHVWDPS

SQL Procédural, 35
Les exceptions dans JDBC
SQLException, SQLWarning, DataTruncation

«
WU\^
3UHSDUHG6WDWHPHQWSVWPW FRQQSUHSDUH6WDWHPHQW


83'$7((PSOR\H6(7VDODU\ "QDPH ":+(5(QXPHPS "


SVPWVHW1XOO  SVPWVHW6WULQJ QRP SVPWVHW,QW QXP 
QE/LJQHV0RGLILHHV SVPWH[HFXWH8SGDWH 
`
FDWFK 'DWD7UXQFDWLRQH ^
'HVGRQQpHVRQWpWpWURQTXpHVRQGpFLGHGHQHULHQIDLUH
`
FDWFK 64/([FHSWLRQH ^
6\VWHPRXWSULQWOQ HJHW0HVVDJH 
Didier Donsez, 1998-2000

ZKLOH H HJHW1H[W([FHSWLRQ  QXOO ^


6\VWHPRXWSULQWOQ HJHW0HVVDJH 
`
` SQL Procédural, 36
Evolution de JDBC

• JDBC 1.0 (Janvier 1996)


• JDBC 2.0 (Mars 1998)
• JDBC 2.1 (2000)
■ Extensions de JDBC 2.x
• Parcours avant-arrière d ’un ResultSet
• Mise à jour depuis un ResultSet
• Batch de plusieurs ordres
• SQL3 datatypes
les types étendus UDT (SQL_DATA) et références REF
les types longs (BLOB, CLOB) et les ARRAY
• Validation à deux phases des transactions (XA)
Didier Donsez, 1998-2000

• Pool de connexion, Cache de lignes sur le client


• RowSet (Composants JavaBean), …
• DataSource et JNDI
SQL Procédural, 37
Positionnement dans un ResultSet

■ Méthodes : first , last , beforeFirst , afterLast,


absolute, previous , relative , moveToCurrentRow

6WDWHPHQWVWPW FRQFUHDWH6WDWHPHQW 5HVXOW6HW7<3(B6&52//B6(16,7,9(


5HVXOW6HW&21&85B83'$7($%/( 
5HVXOW6HWUV VWPWH[HFXWH4XHU\ 6(/(&7 )520(PSOR\H 

UVILUVW 
UVXSGDWH)ORDW 6DODU\I  UVXSGDWH5RZ 
UVDEVROXWH  
)ORDWVDO UVJHW)ORDW 6DODU\VDO 
Didier Donsez, 1998-2000

UVXSGDWH)ORDW VDO   UVXSGDWH5RZ 


UVUHODWLYH  UVSUHYLRXV 
UVXSGDWH)ORDW 6DODU\I  UVXSGDWH5RZ  SQL Procédural, 38
Mise à jour depuis Java

6WDWHPHQWVWPW FRQFUHDWH6WDWHPHQW 5HVXOW6HW7<3(B6&52//B6(16,7,9(


5HVXOW6HW&21&85B83'$7($%/( 
5HVXOW6HWXSUV VWPWH[HFXWH4XHU\
83'$7((PSOR\H6(76DODU\ :+(5(1XP(PS  
XSUVODVW 
XSUVXSGDWH)ORDW 6DODU\ 
XSUVFDQFHO5RZ8SGDWHV 

XSUVXSGDWH)ORDW 6DODU\ 
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 

XSUVPRYH7R,QVHUW5RZ  DXWUHVPpWKRGHVILUVWODVWEHIRUH)LUVWDIWHU/DVW


DEVROXWHSUHYLRXVUHODWLYHPRYH7R&XUUHQW5RZ 
XSUVXSGDWH6WULQJ 1DPH-RVHSK 
XSUVXSGDWH,QW  
XSUVXSGDWH)ORDW 6DODU\I 
XSUVLQVHUW5RZ 
Didier Donsez, 1998-2000

XSUVODVW 
XSUVGHOHWH5RZ 

SQL Procédural, 40
Batch de plusieurs ordres

FRQVHW$XWR&RPPLW IDOVH 
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,QW  SVWPWVHW6WULQJ 
3LHUUH
SVWPWVHW)ORDW I 
SVWPWDGG%DWFK 
Didier Donsez, 1998-2000

SVWPWVHW,QW  SVWPWVHW6WULQJ ¬


0DGHOHLQH
SVWPWVHW1XOO  
SVWPWDGG%DWFK 
LQW>@SXSGDWH&RXQWV SVWPWH[HFXWH%DWFK  FRQFRPPLW 
SQL Procédural, 41
Java-Aware Database
getObject() et setObject()

■ SGBDOO et JDBMS
5HVXOW6HWUV VWPWH[HFXWH4XHU\ 6(/(&7 )520(PSOR\H 
UVQH[W 
(PSOR\HH  (PSOR\H UVJHW2EMHFW  

(PSOR\HP QHZ(PSOR\H 0DWKLHX 
3UHSDUHG6WDWHPHQWSVWPW FRQSUHSDUHG6WDWHPHQW
,16(57,172(PSOR\H (PSOR\HBW 9$/8( "  
SVWPWVHW2EMHFW P 
SVWPWH[HFXWH8SGDWH 
5HPDUTXHOHE\WHFRGHQ¬·HVWSDVVWRFNpLOIDXWXWLOLVHU&ODVVIRU1DPH
Didier Donsez, 1998-2000

SQL Procédural, 42
Principe de Sécurité de JDBC

■ respecte les principes Sécurité de Java


• JDK 1.0 et 1.1 / en changement avec JDK1.2
■ Application / Thrusted Applets
• bases locales
• serveur BD
■ Untrusted Applets / Untrusted JDBC Driver
• connexion au serveur BD
si = @ du site de chargement
Didier Donsez, 1998-2000
Utilisation : Application et Applets

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!SUHSDUH VTO 
IRU #QDPHV ^
VWK!ELQGBSDUDP B'%,64/B9$5&+$5 VWK!H[HFXWH 
P\ QRPVDO VWK!ELQGBFROXPQV XQGHI?QRP?VDO 
Didier Donsez, 1998-2000

ZKLOH VWK!IHWFK  ^SULQWQRPHVWSD\pVDO?Q`


`
VWK!ILQLVK GEK!GLVFRQQHFW 
SQL Procédural, 47
Le module DBI de PERL (ii)
Transactions
XVHVWULFWXVH'%,
P\GEK '%,!FRQQHFW 
GEL2UDFOHRUFO

MHIIUH\

MHIIVSDVVZRUG

^5DLVH(UURU !$XWR&RPPLW !`
 __GLH'DWDEDVHFRQQHFWLRQQRWPDGH'%,HUUVWU
P\#UHFRUGV 
>'XSRQW@>'XUDQG@>0DUWLQ@ 
P\VTO TT^,16(57,172HPSOR\HHV9$/8(6 """ `
P\VWK GEK!SUHSDUH VTO 
IRU #UHFRUGV ^
HYDO^
VWK!ELQGBSDUDP #B!>@'%,64/B,17(*(5 
VWK!ELQGBSDUDP #B!>@'%,64/B9$5&+$5 
VWK!ELQGBSDUDP #B!>@'%,64/B,17(*(5 
VWK!H[HFXWH GEK!FRPPLW 
Didier Donsez, 1998-2000

`
LI # ^ ZDUQ'DWDEDVHHUURU'%,HUUVWU?QGEK!UROOEDFN `
`
VWK!ILQLVK GEK!GLVFRQQHFW  SQL Procédural, 48
Embedded SQL

■Motivations

■Oracle Pro*C
■Informix ESQL

■SQLJ

49
Motivation

■ Syntaxe plus concise que SQL/CLI


■ Analyse statique
• Contrôle de la Syntaxe et du Typage
• Typage curseur dépendant de la Métabase

■ 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

• SQLJ (Oracle, Tandem, IBM, Sybase)


• Java Relational Binding (Ardent Software)

SQL Procédural, 51
Exemple Pro*C

(;(&64/,1&/8'(64/&$/* manipulation des erreurs */


(;(&64/%(*,1'(&/$5(6(&7,21
FKDUQRP>@IORDWVDODLUH
(;(&64/(1''(&/$5(6(&7,21
VFDQI VQRP 
(;(&64/(;(&87(
6(/(&7VDODU\,172VDODLUH
)520(PSOR\H:+(5(QDPH QRP
(1'(;(&
LI VTOFDVTOFRGH  /* sqlerrmc message d ’erreur / sqlerrml sa longueur */
SULQWI (UUHXUG

H[HFXWLRQ?QV?Q
Didier Donsez, 1998-2000

VTOFDVTOHUUPVTOHUUPOVTOFDVTOHUUPVTOHUUPF 
HOVH
SULQWI VJDJQHG?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

LI 127)281' EUHDNHOVHSULQWI VJDJQHG?QQRPVDODLUH 


`
(;(&64/&/26(&85625F
SQL Procédural, 53
Informix ESQL/C

(;(&64/'(&/$5(FXUVHPS&85625)25
6(/(&7QDPHVDODU\,172QRPVDOQXOOBIODJ
)520(PSOR\H)520LWHPV
)255($'21/<
(;(&64/23(1FXUVHPS
ZKLOH 64/&2'(  ^
(;(&64/)(7&+FXUVHPS
LI 64/&2'( 
LI QXOOBIODJ SULQWI GJDJQHULHQ?QQRP
HOVH SULQWI VJDJQHG?QQRPVDO 
Didier Donsez, 1998-2000

`
(;(&64/&/26(FXUVHPS
SQL Procédural, 56
SQLJ - SQL Java

• proposé par Oracle, IBM, Sybase, Tandem à l ’ISO/ANSI


■ Embedded-SQL dans Java
• vers un source Java avec des appels JDBC
■ Exemple
YRLGSULQWBVDODU\ 6WULQJQRP WKURZV64/([FHSWLRQ^
LQWVDO
VTOFRQWH[WFQ['5+
VTO^6(/(&7VDODU\,172VDO)520(PSOR\H:+(5(QRP QDPH`
6\VWHPRXWSULQWOQ QRPHVWSD\pVDO 
VTO>FQ[5(&@^'(/(7()520(PSOR\H`VXUODFRQQH[LRQFQ[5(&
Didier Donsez, 1998-2000

SQL Procédural, 57
SQLJ - Itérateurs
• Notion de curseur
VTOSXEOLFLWHUDWRU,WHU(PS 6WULQJLQW GpFODUDWLRQG¶XQHFODVVHG¶LWpUDWHXU
^
,WHU(PSLWHUGpFODUDWLRQG¶XQREMHWLWpUDWHXU
6WULQJQRPLQWVDOLQWF 
VTOLWHU ^6(/(&7QDPHVDODU\)520(PSOR\H`
ZKLOH WUXH ^
 VTO^)(7&+LWHU,172QRPVDO`
 LI LWHUHQG)HWFK EUHDN
LI F 6\VWHPRXWSULQWOQ QRPHVWSD\pVDO 
`
LWHUVHW5RZ  VHUHSRVLWLRQQHDXSUHPLHUUpVXOWDW
Didier Donsez, 1998-2000

ZKLOH LWHUQH[W  ^VHSRVLWLRQQHVXUOHVUpVXOWDWVHQSRVLWLRQLPSDLUH


6\VWHPRXWSULQWOQ LWHUQDPH HVWSD\pLWHUVDODU\  
`
` SQL Procédural, 58
SQLJ - Autres

■ Modification au niveau de l ’itérateur


,WHU(PSLWHUGpFODUDWLRQG¶XQREMHWLWpUDWHXU
VTOLWHU ^6(/(&7QDPHVDODU\)520(PSOR\H`«
VTO^83'$7((PSOR\H6(7VDODU\ VDODU\ :+(5(&855(172)LWHU`
■ Valeurs Nulles
MDYDVTO'DWHG QXOOLQWV QXOO
VTO^,16(57,172(PSOR\H QDPHVDODU\ELUWKGD\KREE\
9$/8(6
'XSRQG
VG18// `
■ Blocs et Atomicité
YRLG7UDQVIHUW LQW[LQW\LQWP ^
VTO^$720,&%(*,1
Didier Donsez, 1998-2000

83'$7(&RPSWH6(7VROGH VROGHP:+(5(QXPFSW [


83'$7(&RPSWH6(7VROGH VROGHP:+(5(QXPFSW \
,16(57,1727UDQVIHUWV FSWFUHGLWFSWGHELWPRQWDQW 9$/8(6 [\P 
(1'`` SQL Procédural, 59
SQLJ - Interopérabilité avec JDBC

■ Parcours d ’une requête SQLJ à partir d ’un ResultSet


VTOMUXQWLPH5HVXOW6HW,WHUDWRULWHU
VTOLWHU ^6(/(&7QDPHVDODU\)520(PSOR\H`
MDYDVTO5HVXOW6HWUV LWHUJHW5HVXOW6HW 
ZKLOH UVQH[W ^
6WULQJV UVJHW6WULQJ  IORDWI UVJHW)ORDW VDODU\ 
6\VWHPRXWSULQWOQ VJDJQHI 
`UVFORVH 
■ Construction d ’un itérateur à partir d ’un ResultSet
,WHU(PSLWHU
5HVXOW6HWUV VWPWH[HFXWH4XHU\ 6(/(&7QDPHVDODU\)520(PSOR\H 
Didier Donsez, 1998-2000

VTOLWHU UV
ZKLOH LWHUQH[W ^
6\VWHPRXWSULQWOQ LWHUQDPH HVWSD\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

■ Dynamic SQL et Embedded SQL


SQL
SQL Serveur BDR
Client SQL
SQL
SQL
■ Procédure anonyme
Moteur Serveur BDR
Client PL/SQL
PL/SQL SQL

■ Procédure stockée
Moteur Serveur
Didier Donsez, 1998-2000

Client RPC BDR


PL/SQL SQL
Procédure
Stockée
PL/SQL
SQL Procédural, 64
Architecture Client-Serveur

■ Triggers
SQL
Update,
Delete,
Insert

Client Moteur Serveur BDR


PL/SQL SQL
Action
PL/SQL
d ’un
Trigger
Didier Donsez, 1998-2000

SQL Procédural, 65
Standard et Langages

■ Le standard
• SQL3 / PSM
■ Les éditeurs
• Informix
• SPL
• Oracle
• PL/SQL
• …
■ Remarque
Didier Donsez, 1998-2000

• Java est de plus en plus utilisé


pour les « Java Stored Procedures »

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

• envoyé par le client au serveur


■ Syntaxe
'(&/$5( GpFODUDWLRQVGHVYDULDEOHVORFDOHVRSWLRQHO
%(*,1 VXLWHG¶LQVWUXFWLRQV3/64/
RXGHEORFVDQRQ\PHV
(;&(37,21 VXLWHG¶LQVWUXFWLRQV3/64/ RSWLRQHO
RXGHEORFVDQRQ\PHV
(1'

Didier Donsez, 1998-2000

5XQ SURYRTXHO¶H[pFXWLRQGHODSURFpGXUHDQRQ\PH

SQL Procédural, 68
Typage des Variables

■ Type de Données SQL


‡ &+$59$5&+$5180%(5'$7(%22/($1/21*5$:52:,'

■ Constructeur de type complexe


‡ 5(&25'7$%/(7$%/(RI5(&25'6

■ ADT Abstract Data Type


• type « objet »

■ Désignation du type d’une colonne d’un table


Didier Donsez, 1998-2000

nom de table!nom de colonne!7<3(

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

• 1 seule ligne retournée sinon erreur


■ SELECT INTO
'(&/$5(
PDVVH6DODLULDOH3OXV(PSOR\HVDODU\7<3(
%(*,1
 6(/(&7 680 VDODU\
,172 PDVVH6DODLULDOH3OXV
)520 (PSOR\H
:+(5( VDODU\!
(1'
■ RETURNING
'(&/$5(QRP(PSOR\HQDPH7<3(QRXYHDXVDO(PSOR\HVDODU\7<3(
%(*,1
Didier Donsez, 1998-2000

83'$7((PSOR\H6(7VDODU\ VDODU\ :+(5(QXPHPS 


5(7851,1*QDPHVDODU\,172QRPQRXYHDXVDO
(1'
SQL Procédural, 72
Exceptions (i)
GHFODUH
V(PSOR\HVDODU\7<3(YDULDEOHORFDOH
EHJLQ
EHJLQ
VHOHFWVDODU\LQWRVIURP(PSOR\HZKHUHQXPHPS QXP
H[FHSWLRQ
ZKHQQRBGDWDBIRXQG
EHJLQ
V QRWLILH(UUHXU QXP $SSHOG¶XQHDXWUHSURFpGXUH
HQG
HQG
H[FHSWLRQ
ZKHQQRBGDWDBIRXQG
EHJLQ
QRWLILH(UUHXU QXP -DPDLVDWWHLQW
Didier Donsez, 1998-2000

HQG
ZKHQRWKHUVWKHQQXOO
HQG
SQL Procédural, 73
Exceptions (ii)
GHFODUH
HB'HSDVVHPHQW (;&(37,21GpFODUDWLRQG¬·XQHH[FHSWLRQXWLOLVDWHXU
V (PSOR\HVDODU\7<3(
EHJLQ
EHJLQ
VHOHFWVXP VDODU\ 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(UUHXU QXP -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
GpFODUDWLRQVGHVYDULDEOHVORFDOHV RSWLRQHO
%(*,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

• type : de base (SQL92), NUMBER, ADT (SQL3)


• désignation du type d’une colonne d’un table
table!colonne!7<3(
SQL Procédural, 78
Procédures Stockées

■ 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
FUHDWHRUUHSODFHIXQFWLRQJHWBVDO QXPLQ(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(UUHXU QXP $SSHOG¶XQHDXWUHSURFpGXUH
HQG
ZKHQRWKHUVWKHQQXOO
HQGEORFLPEULTXp
Didier Donsez, 1998-2000

UHWXUQV
HQGIXQFWLRQ
SQL Procédural, 80
Informix SPL

■ SPL (Stored Procedure Language)

■ Définition de Procédures et de Fonctions Stockées


&5($7(352&('85(UDLVHBSULFHV SHUBFHQW,17

(1'352&('85(
'2&80(1786$*((;(&87(352&('85(UDLVHBSULFHV [[[ 
[[[ SHUFHQWDJHIURP

&5($7()81&7,21ILQGBJURXS LG,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\BSFW SFW,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(GRQRWKLQJVLJQLILFDQW FRQW
%(*,1
)25L,1 72
)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

■ Rendre persistant des objets Java


• 35% du travail du développeur passe dans le mapping Objet/JDBC

■ Plusieurs solutions de stockage


• Sérialisation + Fichier
• L ne permet pas le partage et la recherche, n ’est pas incrémental
• JDBC
• API bas-niveau
L impedance mismatch
• SQLJ
• Embedded SQL in Java
Didier Donsez, 1998-2000

L impedance mismatch
• JavaBlend
SQL Procédural, 87
JavaBlend

■ OML Java de l ’ODMG2.0 (www.odmg.org)


• classes additionnelles
• PersistentRoot et OID
• Dcollection , ...
■ Transparence au SQL
• Surcouche à JDBC
Didier Donsez, 1998-2000

SQL Procédural, 88
Java coté SGBD

■ Java Stored Procedure/Function (Oracle)


• Procédures/Fonctions stockées écrites en Java (au lieu de
PL/SQL) et utilisant JDBC ou SQLJ
■ Java Triggers (Oracle)
• Actions des triggers écrites en Java (au lieu de PL/SQL) et
utilisant JDBC ou SQLJ
Didier Donsez, 1998-2000

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

• mise en œuvre de JDBC en architecture multi-tiers


• benchmark TPC/AB avec JDBC
• Tutorial JDBC de http://java.sun.com
SQL Procédural, 91
Bibliographie

■ 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