Programmation Procédurale Avec SQL

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 88

Programmation Procédurale

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

• 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

Vous aimerez peut-être aussi