Vous êtes sur la page 1sur 16

SQL Server 226951280.

doc
1)-PROCDURES STOCKES.
Une procdure stocke (Stored Procedure pour SQL Server) est une suite
dinstructions SQL stockes dns ! "se de donnes et pouvnt #tre e$cute pr
ppe! de son no%.
&utres ter%es uti!iss ' procdure ct!o(ue ) procdure %%orise
*e%ote procedure en n(!is.
Prticu!rits '
Les procdures stockes di++,rent des instructions SQL '
!eur s-nt$e est vri+ie et e!!es sont co%pi!es. .est !e code co%pi! /ui est
uti!is !ors des ppe!s
ne sont ps ppe!es uto%ti/ue%ent0 %is doivent +ire !o"1et dun ppe!
e$p!icite de ! prt de !uti!isteur.
peuvent #tre ppe!es pr p!usieurs pp!ictions +ront!es
&vnt(es '
&%!iorent !es per+or%nces pr uti!istion du code co%pi!
*en+orcent !int(rit de ! "se '
en centr!isnt !es trite%ents en un endroit uni/ue unicit du code
2)- CRATION DES PROCDURES STOCKES.
L crtion de procdures %%orises se +it dns ! "se cournte vec !instruction
SQL
CREATE PROCedure
S-nt$e '
CREATE PROC nom_de_procdure AS ordre_SQL
(*)
(*)
voir Fiche technique programmation SQL
.ette crtion est +is"!e soit
2 en intercti+ (r3ce 4 ISQL/w
2 u trvers !e (estionnire do"1ets de SQL Server ' SQL Entrepr!e "#n#$er
Re%#r&ue'
Les procdures ct!o(ues sont des o"1ets co%pi!s.
.eci i%p!i/ue /ue!!es ne peuvent ps #tre %odi+ies.
Une procdure stocke doit #tre suppri%e pour #tre 4 nouveu cre.
.ependnt0 !inter+ce SQL 5"1ect 6n(er %s/ue cette contrinte.
L suppression dune procdure %%orise se +it pr '
DROP PROCedure nom_de_procdure
777.tsdi.or( P(e 1
SQL Server 226951280.doc
I%#$e de ()nter*#+e SQL O,-e+t "#n#$er
*e%r/ue ' Le "outon vert co%pi!e ! procdure stocke %is ne !8e$cute ps
777.tsdi.or( P(e 2
SQL Server 226951280.doc
E./+ut0n de pr0+/dure! !t0+1/e!.
Le$cution dune procdure %%orise se +it pr ppe! (r3ce 4 !instruction SQL
E2ECute
S-nt$e '
E2ECUTE nom_de_procdure
ou
E2EC nom_de_procdure
Lppe! pour e$cution dune procdure stocke peut se +ire en intercti+ (vec
!8uti!itire 9s/!) ou #tre inc!us dns un e$cut"!e (r3ce 4 un !n((e :;te (<rnsct
SQL pour SQL Server) ou tout !n((e supportnt !envoi de re/u#tes SQL te! /ue
=isu! >sic.
C0d#$e d)une pr0+/dure !t0+1/e 3 +*. +4#ptre 1).
?!!e se +it pr !inter+ce SQL 5"1ect 6n(er.
Le !n((e uti!is est <rnsct S/! pour S/! Server
?$e%p!e d8une procdure stocke sous SQL Server'
@Liste des diteurs et uteurs vec cu%u! nnue! des ventes@
i+ e$ists (se!ect A +ro% s-so"1ects 7:ere id B o"1ectCid(8d"o.rept/28) nd s-sstt D 0$+ B E)
drop procedure d"o.rept/2
F5
.*?&<? P*5.?GU*? rept/2 &S
S?L?.< t-pe0 idCditeur0 titres.idCtitre0 c%dCuteur0
H%e B su"strin( (no%Cuteur0 1015)0 cu%u!nnue!Cventes
I*56 titres0 uteurs0 titreuteur
JK?*? titres.idCtitre B titreuteur.idCtitre &HG uteurs.idCuteur B titreuteur.idCuteur
&HG idCditeur is H5< HULL
5*G?* >L idCditeur0 t-pe
.56PU<? v((cu%u!nnue!Cventes) >L idCditeur0 t-pe
.56PU<? v((cu%u!nnue!Cventes) >L idCditeur
F5
*e%r/ue ' ! prtie :ute de ! procdure ct!o(ue 0suppression de ce!!e2ci
vnt recrtion0 est (nre uto%ti/ue%ent pr S/! Server.
777.tsdi.or( P(e M
SQL Server 226951280.doc
M)2?H=59 GUH? P*5.NGU*? .&<&L5FUN? SQL S?*=?* &=?. P&SS&F? G? P&*&6O<*?S.
>ut ' Fnr!istion ! notion de c!ient)serveur
.o%%e vu u c:pitre 10 ! +cu!t de crer et de conserver des trite%ents dns
!e no-u %#%e du SF>G* sous +or%e de procdures ct!o(ues (ou procdures
stockes ou de procdures %%orises) et de !es ppe!er dns !es trite%ents
ssocis u c!ient ccroPt !es possi"i!its de trite%ents et surtout ! soup!esse des
pp!ictions +ront!es (code co:rent et uni/ue) et !eur +i"i!it en %intennce (une
seu!e source de code 4 %intenir en cs de "esoin de %odi+iction).
.ependnt si !on sen tient u c:pitre 10 i! est possi"!e de de%nder !e
dc!enc:e%ent de procdures stockes %ono!it:i/ues et +i(es.
Lintr#t serit de pouvoir d+inir u niveu du SF>G* des pr0+/dure! $/n/r&ue!
/ui ccepterient en entre !ors de !eur e$cution une ou des v!eurs prticu!i,res /ui
per%ettrit d++iner !e trite%ent %ono!it:i/ue et de !e rendre Q #d#pt#,(e R.
?$e%p!e'
& supposer /ue !on trvi!!e sur une "se de donnes dun c!u" de vcnces et
/ue !on it "esoin de connPtre !es ctivits dun vi!!(e donn dns une
pp!iction +ront!e.
9! est vident /uen +onction de ! de%nde0 i! ne s(ir ps tou1ours du %#%e
vi!!(e. Gns ces conditions0 !intr#t serit de pouvoir d+inir u niveu "se de
donnes une procdure dont ! +onctionn!it serit de retrouver !es ctivits
propres 4 un vi!!(e donn /ue!con/ue0 4 c:r(e pour ! personne ou !e
trite%ent ppe!nt cette +onction de !ui +ournir pour /ue! vi!!(e !es in+or%tions
sont de%ndes.
L procdure pourrit !ors e++ectuer s rec:erc:e et renvo-er !es ctivits
correspondnt u vi!!(e en /uestion sous +or%e t"u!ire. Les trite%ents
de%ndeurs en +ront! prennt !e re!is pour prsenter ces in+or%tions.
"!e en 0eu5re.
Gns !e cdre de trvi! (=isu! >sic en tnt /ue +ront! et SQL Server en serveur de
"se de donnes)0 on sit e++ective%ent dc!enc:er une procdure stocke vi 5G>..
*este 4 svoir'
si SQL Server d%et !e pss(e de v!eurs dns ses procdures.
co%%ent psser ces v!eurs de =isu! >sic vers SQL Server et vec /ue!!e
s-nt$e.
1
er
p0nt ' (e! pr0+/dure! +#t#(0$u/e! de SQL Ser5er #++eptent-e((e! de! 5#(eur!6
*ponse ' oui0 cest d14 S4T
.o%%entU
777.tsdi.or( P(e E
SQL Server 226951280.doc

?n +it0 dns !es procdures ncessitnt des v!eurs prticu!i,res i! v #tre
ncessire de d+inir co%"ien de v!eurs seront psses !ors de !ppe! et
sous /ue!!e +or%e.
5n pr!e de p#r#%7tre! et de pr0+/dure! p#r#%7tr#,(e!.
.e!!es2ci respectent certines r,(!es de s-nt$e u %o%ent '
de ! crtion de ! procdure
de son uti!istion.
Cr/#t0n d)une pr0+/dure !t0+1/e p#r#%7tr#,(e.
?!!e se +it pr !inter+ce SQL 5"1ect 6n(er.
L s-nt$e est ce!!e donne dns !e$e%p!e ci2dessous.
.E.e%p(e de d/+(#r#t0n d)une pr0+/dure +#t#(0$u/e d#n! SQL Ser5er
#5e+ p#r#%7tre! en entr/e
i+ e$ists (se!ect A +ro% s-so"1ects 7:ere id B o"1ectCid(8d"o.rept/M8) nd s-sstt D 0$+ B E)
drop procedure d"o.rept/M
F5
.*?&<? P*5.?GU*? rept/M
V!i%iteCin+rieure %one-0
V!i%iteCsuprieure %one-0
Vt-pe c:r(12)
&S
S?L?.< idCditeur0 t-pe0 idCtitre0 pri$
I*56 titres
JK?*? pri$ WV!i%iteCin+rieure &HG pri$ XV!i%iteCsuprieure &HG t-pe B Vt-pe 5* t-pe L9Y? 8Zcui
Z8
5*G?* >L idCditeur0 t-pe
.56PU<? count(idCtitre) >L idCditeur0 t-pe
F5
9nterprttions'
L procdure stocke rp+8 rept/M dc!re voir "esoin de trois pr%,tres en
entre '
- 9t:pe une c:Pne de 12 crct,res
- 9(%te8n*/reure %one-
- 9(%te8n*/reure %one-
.es <rois pr%,tres psss seront uti!iss dns ! c!use de restriction where de
!ordre Se!ect de te!!e %ni,re /ue !on ne sou:ite voir en rsu!tt de Se!ect (+or%e
t"u!ire) /ue !es !i(nes correspondnt 4 ! de%nde
Re%#r&ue'
! s-nt$e pour c:/ue pr%,tre est @nom_symboique ussi "ien en
dc!rtion /uen %nipu!tion
777.tsdi.or( P(e 5
SQL Server 226951280.doc
.E.e%p(e de d/+(#r#t0n d)une pr0+/dure +#t#(0$u/e d#n! SQL Ser5er #5e+
p#r#%7tre! en entr/e et p#r#%7tre! en !0rte
.ertines procdures peuvent retourner une (ou p!usieurs) v!eurs (s).
Gns ce cs0 prciser 5U<PU< pr,s !e no% et !e t-pe du pr%,tre.
?$e%p!e ' Vpr%1 int 5U<PU<
.*?&<? P*5.?GU*? rept/M2
V%$nu% int 5U<PU<
&S
>e(in
9+ e$ists(se!ect A +ro% e%p!o-es)
>e(in
Se!ect V%$nu% B (se!ect %$(nu%e%p) +ro% e%p!o-es)
?nd
?!se
>e(in
Se!ect V%$nu% B 0
?nd
end
F5
L procdure stocke rept/M2 renvoie une v!eur de retour /ui est !e p!us (rnd
nu%ro de%p!o- de ! t"!e e%p!o-s (ou 0) si ! t"!e est vide.
777.tsdi.or( P(e 6
SQL Server 226951280.doc
Cr/#t0n d)une pr0+/dure !t0+1/e ,#(#:#nt (e r/!u(t#t d)une re&u;te
Luti!istion des curseurs est une tec:ni/ue per%ettnt de triter !i(ne pr !i(ne !e
rsu!tt dune re/u#te.
Le curseur doit #tre dc!r '
De+(#re c1 cursor +or se!ect [[[[..
Puis ouvert '
Open c1
Pour e$trire une !i(ne 0 uti!iser !instruction <et+4 .
?n +in de trite%ent0 +in de !i"rer ! %%oire0 +er%er !e curseur ' +(0!e c1
puis !e suppri%er ' de#((0+#te c1
e$e%p!e '
on veut stocker dns une t"!e de trvi! !es trois e%p!o-s -nt !e p!us :ut s!ire
et ce pr service.
.*?&<? P*5.?GU*? rept/MM
&S
>e(in
.rete t"!e \te%poCe%p (nu%e%p c:r(6)0 service c:r(2)0 s!ire int)
F5
Gec!re curseur2e%p!o-es cursor +or
se!ect nu%e%p0 service0 s!ire +ro% e%p!o-es order "- service0 s!ire G?S.
dec!re V cpt int
dec!re Vvnu%ero c:r(6)
dec!re Vvservice c:r(2)
dec!re Vv7service c:r(2)
dec!re Vvs!ire int
5pen curseur2e%p!o-es
Ietc: curseur2e%p!o-es into Vvnu%ero0 Vvservice0 Vvs!ire
J:i!e (VV+etc:Csttus B 0)
>e(in
9nsert into te%poCe%p v!ues (Vvnu%ero0 Vvservice0 Vvs!ire)
Se!ect Vv7service B Vvservice
Se!ect cpt B 1
Ietc: curseur2e%p!o-es into vnu%ero0 Vvservice0 Vvs!ire
J:i!e (VV+etc:Csttus B 0 n+ Vvservice B Vv7service)
>e(in
9+ (Vcpt XM)
>e(in
9nsert into te%poCe%p v!ues (Vvnu%ero0 Vvservice0 Vvs!ire)
Se!ect Vcpt B Vcpt ] 1
?nd
Ietc: curseur2e%p!o-es into Vvnu%ero0 Vvservice0 Vvs!ire
end
end
c!ose curseur2e%p!o-es
777.tsdi.or( P(e ^
SQL Server 226951280.doc
de!!octe curseur2e%p!o-es
end
F5
777.tsdi.or( P(e 8
SQL Server 226951280.doc
E)2Uti!istion dune procdure stocke sous SQL Server.
777.tsdi.or( P(e 9
SQL Server 226951280.doc
777.tsdi.or( P(e 10
SQL Server 226951280.doc
9nterprttion'
& titre de$e%p!e0 !es v!eurs ont t psses ici sous +or%e de !ittru$. Le %n/ue
de soup!esse est encore vident et !e "ut de ! %noeuvre consisterit 4 pouvoir
c/urir !es in+or%tions dont on "esoin (r3ce 4 un di!o(ue pp!iction)uti!isteur_
pour dc!enc:er ensuite ! procdure stocke vec ! ou !es v!eurs c/uises.
.est ce /ue vont per%ettre =isu! >sic et 5G>.. Suite dns ! proc:ine
s/uence.
777.tsdi.or( P(e 11
SQL Server 226951280.doc
E)2?$ercices
*eprendre !e c:ier des c:r(es F5?L&HG et triter !es de%ndes suivntes en
procdures stockes '
Pr0+/dure 1 '
5n sou:ite o"tenir pr %od,!e ! %o-enne des :eures de vo! des vions.
Pr0+/dure 2 '
5n sou:ite o"tenir pour une dte donne ! !iste des rservtions pr !i(ne0 vo! et
tpe0 psser ! dte en pr%,tre.
Gistin(uer ! c!sse touriste de ! 1ere c!sse _ prciser !e no%"re de personnes .
Pr0+/dure = '
5n veut crer une /u!i+iction pour un pi!ote sur un %od,!e d8vion.
- =ri+ier /ue !8e%p!o- est un pi!ote (<-pe personne! B @P@)
- =ri+ier /u8i! !e dip!;%e re/uis pour ce %od,!e
- =ri+ier ! dte de v!idit du dip!;%e
- Positionner ! dte de /u!i+iction 4 ! dte du 1our
?ntrer !e nu%ro d8e%p!o- et !e nu%ro de %od,!e.
Pr0+/dure > '
5n veut ++ecter un t-pe de personne! 4 un vo!
- =ri+ier /ue cette personne est "ien ctive (code ctivit B 8&8)
- =ri+ier /ue cette personne n8est ps ++ecte 4 un utre vo! sur !es %#%es
dtes
- =ri+ier /ue ! dte du vo! pour cette ++ecttion est (!e 4 dte de derni,re
++ecttion p!us 2 1ours.
- =ri+ier /u8i! n8- ps pour '
- Les pi!otes ' p!us de deu$ d14 ++ects
- Les :otesses ' p!us de trois d14 ++ectes
- Les ste7rds ' p!us de 1 d14 ++ect
- *envo-er ! !iste des personne!s ++ect 4 ce vo! pr,s cette ++ecttion
?ntrer !e nu%ro d8e%p!o- et !e nu%ro de vo!.
777.tsdi.or( P(e 12
SQL Server 226951280.doc
5)2<rite%ent des trnsctions
Qu8est2ce /u8une trnsction et pour/uoi en i21e "esoin U
.8est une unit de trvi! !o(i/ue
6odi+iction de ! "se de donnes en (roupe
&ssure ! co:rence de ! "se de donnes
.e sont !es proprits &.9G
&to%icit ' succ,s ou c:ec
.onsistnce ' tout est +it ou rien n8est +it
9so!tion ' indpendnt d8utres trnsctions ou vne%ents
Gur"i!it ' !es c:n(e%ents0 une +ois trits0 ne peuvent ps #tre
nnu!s
.8est une t3c:e du pro(r%%eur de !8pp!iction ou de ! "se de donnes de
d+inir une trnsction vec SQLServer
Les trnsctions peuvent #tre uti!ises dns !e !n((e (rp:i/ue insi /ue dns
<rnsc2SQL (Procdure stocke) '
Gns <SQL0 i! n8- ur ps d8!!er2retour vers !e c!ient0 ! trnsction ser
donc ter%ine p!us rpide%ent.
Gns !e !n((e (rp:i/ue !8uti!istion des trnsctions dpend du
deve!oppe%ent0 criture du code ncessire u$ trnsctions.
9nstructions <rnsct SQL de (estion d8une trnsction
S-nt$es
G"ut de trnsction
>?F9H <*&H`S&.<95Ha `no%trnsctiona
=!idtion de trnsction
.5669< <*&H`S&.<95Ha `no%trnsctiona
Gc!rtion d8un point de contr;!e
S&=? <*&H`S&.<95Ha `no% du point de contr;!ea
&nnu!tion de trnsction
*5LL>&.Y <*&H`S&.<95Ha `no%trnsction)no% de point de contr;!ea
?$e%p!e de trnsction Serveur
777.tsdi.or( P(e 1M
SQL Server 226951280.doc
Libration des personnes a!!ectes " un pro#et " a !in de ceui$ci%
.*?&<? P*5. Pro1ect.o%p!eted (Vpid HU6?*9. (10))
s
>?F9H <*&HS&.<95H &u(%ente
UPG&<? Pro1ect
S?< .o%p!etionGte B (etdte()
JK?*? Pro1ect9G B Vpid
9+ VVro7count B 0
>?F9H
*5LL>&.Y <*&HS&.<95H
*&9S?**5* (89d Pro1ect incorrect 80 160 1)
*?<U*H
?HG
UPG&<? &ssi(n%ent
S?< *e!eseGte B (etdte()
JK?*? Pro1ect9G B Vpid
&HG *e!eseGte is HULL
.5669< <*&HS&.<95H
777.tsdi.or( P(e 1E
SQL Server 226951280.doc
<rnsctions i%"ri/ues
Le *o!!"ck des trnsctions i%"ri/ues renvoie tou1ours u d"ut de ! pre%i,re
procdure /ui d%rre ! pre%i,re trnsction.
777.tsdi.or( P(e 15

Begin Tran

CALL B
If not ok
Rollback
Tran
Else
Commit Tran

Begin Tran

CALL C
If not ok
Rollback Tran
Else
Commit Tran

Begin Tran

If not ok
Rollback Tran
Else
Commit Tran
SQL Server 226951280.doc
6)2Festion des verrous
Lors de trnsctions concurrentes0 SQLServer (,re uto%ti/ue%ent
des verrous +in de (rntir ! co:rence des donnes de c:/ue trnsction.
Une trnsction ne pourr ps %odi+ier des p(es ccessi"!es pr une
utre trnsction0 et ne pourr !ire des p(es en cours de %odi+ictions (!ecture
co:rente).
5n peut (ir sur !es verrous de p!usieurs +Son0 u niveu de !
con+i(urtion et u niveu des trnsctions.
Les oprtions Se!ect ont "esoin d8un verrou prt( (s:re !ock)
9nsert0 updte et de!ete ncessitent des verrous e$c!usi+s
.:oi$ du niveu
Hiveu de ! p(e (P(e !eve!)
Ges p(es de 2Y (200E8 octets)0 c8est "eucoup pour des t"!es
troites
Le niveu de ! p(e %oins de surcobt (te%ps %c:ine) /ue !e
niveu !i(ne.
Hiveu de ! t"!e (<"!e !eve!)
&pr,s !e dpsse%ent d8un seui!0 !e verroui!!(e psse u niveu
de t"!e
.eci rduit !e surcobt db 4 ! (estion du verroui!!(e de p(es
individue!!es
Hiveu de !8insertion des !i(nes (9nsert *o7 !eve!)
*duit ! contention /und !es insertions 1outent des !i(nes 4 !
t"!e
.8est c:oi$ sont +it u niveu (nr! est pprtiennent u respons"!e
de ! "se de donnes0 !e dve!oppeur indi/ue ce /u8i! +it dns ses
pp!ictions.
777.tsdi.or( P(e 16

Vous aimerez peut-être aussi