You are on page 1of 9

Bi thc hnh mn H qun tr CSDL

Hng dn thc hnh mn H qun tr CSDL

Ch 1
Stored-Procedure & Trigger & Function
Mc ch

Xy dng Stored procedure v trigger thc hin cc chc nng ca h


thng.
S dng cc lnh Transact-SQL, Cursor.
Bi tp thc hnh:
o File: Bai_tap_Chu_de_1_-_StoreProcedure_-_Trigger_-_Function.pdf
o File: Dac_ta_CSDL_Quan_ly_thu_vien.pdf (cc mc 4.1 4.13; 5.1
5.4).

Table of Contents
1.

Stored-Procedure.............................................................................................. 2
1.1. Gii thiu........................................................................................................................................... 2
1.2. nh ngha ........................................................................................................................................ 3
1.3. C php............................................................................................................................................. 3
1.3.1. Lnh to Procedure .................................................................................................................. 3
1.3.2. Khai bo bin v gn gi tr cho bin, Ghi ch ...................................................................... 3
1.3.3. Bin dch v gi thc thi mt stored-procedure .................................................................... 3
1.3.4. Lnh cp nht Procedure ......................................................................................................... 4
1.3.5. Lnh xa Procedure.................................................................................................................. 4
1.4. V d .................................................................................................................................................. 4
2. Trigger.............................................................................................................. 5
2.1. Gii thiu........................................................................................................................................... 5
2.2. C php............................................................................................................................................. 5
2.2.1. Lnh to Trigger ....................................................................................................................... 5
2.2.2. Lnh xa Trigger ...................................................................................................................... 5
2.3. V d .................................................................................................................................................. 5
3. Cursor............................................................................................................... 6
3.1. C php............................................................................................................................................. 6
3.2. V d .................................................................................................................................................. 6
4. Function ........................................................................................................... 8
4.1. C php............................................................................................................................................. 8
4.2. V d .................................................................................................................................................. 8
5. Bi tp .............................................................................................................. 9

B mn H thng thng tin Khoa Cng ngh thng tin i hc Khoa hc t nhin

Bi thc hnh mn H qun tr CSDL

1. Stored-Procedure
1.1. Gii thiu
Khi chng ta to mt ng dng vi Microsoft SQL Server, ngn ng lp trnh Transact-SQL l ngn ng chnh
giao tip gia ng dng v database ca SQL Server. Khi chng ta to cc chng trnh bng Transact-SQL, hai
phng php chnh c th dng lu tr v thc thi cho cc chng trnh l:
-

Chng ta c th lu tr cc chng trnh cc b v to cc ng dng gi cc lnh n SQL Server v


x l cc kt qu,

Chng ta c th lu tr nhng chng trnh nh cc stored procedure trong SQL Server v to ng


dng gi thc thi cc stored procedure v x l cc kt qu.

c tnh ca Stored-procedure trong SQL Server :


Chp nhn nhng tham s vo v tr v nhng gi tr c cha trong cc tham s ra gi
nhng th tc hoc x l theo l.
Cha cc lnh ca chng trnh thc hin cc x l trong database, bao gm c lnh gi cc th
tc khc thc thi.
Tr v cc trng thi gi tr gi nhng th tc hoc thc hin cc x l theo l cho bit vic
thc hin thnh cng hay tht bi, nu tht bi th l do v sao tht bi.
Ta c th dng TransactSQL EXCUTE thc thi cc stored procedure. Stored procedure khc vi cc hm x
l l gi tr tr v ca chng khng cha trong tn v chng khng c s dng trc tip trong biu thc.
Stored procedure c nhng thun li so vi cc chng trnh Transact-SQL lu tr cc b l:
Stored procedure cho php iu chnh chng trnh cho ph hp: Chng ta c ch to
stored procedure mt ln v lu tr trong database mt ln, trong chng trnh chng ta c th gi
n vi s ln bt k. Stored procedure c th c ch r do mt ngi no to ra v s thay i
ca chng hon ton c lp vi source code ca chng trnh.
Stored procedure cho php thc thi nhanh hn: nu s x l yu cu mt on source code
Transact SQL kh ln hoc vic thc thi mang tnh lp i lp li th stored procedure thc hin
nhanh hn vic thc hin hng lot cc lnh Transact-SQL. Chng c phn tch c php v ti u
ha trong ln thc thi u tin v mt phin bn dch ca chng trong s c lu trong b nh
s dng cho ln sau, ngha l trong nhng ln thc hin sau chng khng cn phi phn tch c
php v ti u li, m chng s s dng kt qu c bin dch trong ln u tin.
Stored procedure c th lm gim bt vn kt ng truyn mng: gi s mt x l m
c s dng hng trm lnh ca Transact-SQL v vic thc hin thng qua tng dng lnh n, nh
vy vic thc thng qua stored procedure s tt hn, v nu khng khi thc hin chng ta phi gi
hng trm lnh ln mng v iu ny s dn n tnh trng kt mng.
Stored procedure c th s dng trong vn bo mt ca my: v ngi s dng c th
c phn cp nhng quyn s dng cc stored procedure ny, thm ch h khng c php
thc thi trc tip nhng stored procedure ny.

B mn H thng thng tin Khoa Cng ngh thng tin i hc Khoa hc t nhin

Bi thc hnh mn H qun tr CSDL

1.2. nh ngha
Mt Stored procedure c nh ngha gm nhng thnh phn chnh sau:
-

Tn ca stored procedure
Cc tham s
Thn ca stored procedure: bao gm cc lnh ca Transact-SQL dng thc thi procedure.

Mt stored procedure c to bng lnh Create Procedure, v c th thay i bng cch dng lnh Alter
Procedure, v c th xa bng cch dng lnh Drop Procedure trong lp lnh ca Transact SQL

1.3. C php
1.3.1.

Lnh to Procedure
CREATE PROCEDURE procedure_name
{@parameter data_type input/output }/*cc bin tham s vo
AS
Begin
[khai bo cc bin cho x l]
{Cc cu lnh transact-sql}
End

Ghi ch:
o Trong SQL Server, c th ghi tt mt s t kha m tn c chiu di hn 4 k t. V
d: c th thay th Create Procedure bng Create Proc.

o
1.3.2.

ra*/

Tn hm, tn bin trong SQL Server khng phn bit hoa thng.

Khai bo bin v gn gi tr cho bin, Ghi ch


/*Khai bo bin*/
DECLARE @parameter_name data_type
/*Gn gi tr cho bin*/
SET @parameter_name = value
SELECT @parameter_name = value
/*In thng bo ra mn hnh*/
print NChui thng bo unicode
--Ghi ch 1, mt dng
/*
Ghi ch 2
Nhiu dng
*/

1.3.3.

Bin dch v gi thc thi mt stored-procedure


-

Bin dch : Chn ton b m lnh To stored-procedure Nhn F5


Gi thc thi mt store-Procedure c bin dch bng lnh exec:
EXECUTE procedure_name --Stored-proc khng tham s
EXEC procedure_name Para1_value, Para2_value, --Stored-proc c tham s

B mn H thng thng tin Khoa Cng ngh thng tin i hc Khoa hc t nhin

Bi thc hnh mn H qun tr CSDL


1.3.4.

Lnh cp nht Procedure


ALTER PROCEDURE procedure_name
[ {@parameter data_type } ]
AS
Begin
[khai bo cc bin cho x l]
{Cc cu lnh transact-sql}
End

1.3.5.

Lnh xa Procedure
DROP PROCEDURE

procedure_name

1.4. V d
-

T o stored-procedure tnh tng ca 2 s nguyn


--To stored-procedure sp_tong
CREATE PROCEDURE sp_Tong
@So1 int, @So2
int, @Tong
AS
Begin
SET @Tong = @So1 + @So2;
End

int out

--Bin dch stored-procedure F5


--Kim tra
Declare @Sum int
Exec sp_Tong 1, -2, out @Sum
Select @Sum

To stored procedure lit k nhng thng tin ca u sch, thng tin ta sch v s lng sch
hin cha c mn ca mt u sch c th (ISBN).
CREATE PROCEDURE sp_ThongtinDausach
@isbn int
AS
Begin
SELECT tuasach, tacgia, ngonngu, bia, trangthai, count(*)
FROM dausach ds, tuasach ts, cuonsach cs
WHERE
ds.ma_tuasach = ts.ma_tuasach AND
ds.isbn = cs.isbn AND
ds.isbn = @isbn AND
tinhtrang = yes
GROUP BY tuasach, tacgia, ngonngu, bia, trangthai
End

B mn H thng thng tin Khoa Cng ngh thng tin i hc Khoa hc t nhin

Bi thc hnh mn H qun tr CSDL

2. Trigger
2.1. Gii thiu
Trigger l mt trng hp c bit ca store procedure, n s c hiu lc khi chng ta thay i d liu trn mt
bng d liu c th, hoc cc x l lm thay i d liu ca cc lnh: insert, update, delete. Trigger c th cha
cc lnh truy vn t cc bng khc hoc bao gm nhng lnh SQL phc tp.
Mt s thun li khi s dng trigger:
Trigger chy mt cch t ng: chng c kch hot ngay tc th khi c s thay i d liu
trn bng d liu.
Trigger c th thc hin cascade khi vic thi hnh c nh hng n nhng bng lin quan.
Trigger c nhng hiu lc t b hn ch hn so vi rng buc gi tr ngha l c th rng buc
tham chiu n nhng ct ca nhng bng d liu khc.
Khi trigger c kch hot bi 1 lnh Transact-SQL insert thm mt b mi vo bng AAA th b
mi ny c lu tm thi vo mt bng tm c tn l inserted c cng cu trc vi bng AAA.
Khi kt thc trigger ny th b d liu mi tht s lu xung CSDL.
Tng t i vi lnh delete, cc b d liu b xa s chuyn tm vo bng tm deleted.

2.2. C php
2.2.1.

Lnh to Trigger
Create Trigger trigger_name on table_name
For
[insert,update,delete]
As
Begin
{Khai bo cc bin x l}
{Cc lnh Transact-SQL}
End

2.2.2.

Lnh xa Trigger
Drop Trigger trigger_Name

2.3. V d
To trigger cho thao tc xa mt u sch trong bng Muon.
CREATE TRIGGER tg_delMuon ON muon
FOR delete
AS
Begin
DECLARE @isbn int, @ma_cuonsach smallint
SELECT @isbn = isbn, @ma_cuonsach = ma_cuonsach
FROM deleted
UPDATE cuonsach
SET
tinhtrang = yes
WHERE isbn = @isbn AND ma_cuonsach = @ma_cuonsach
End

B mn H thng thng tin Khoa Cng ngh thng tin i hc Khoa hc t nhin

Bi thc hnh mn H qun tr CSDL

3. Cursor
Cursor l mt kiu d liu c bit, c dng lu tr kt qu ca cu lnh SELECT trong qu trnh lp
trnh.

3.1. C php
Lnh khai bo bin cursor:
DECLARE cursor_name [INSENSITIVE] [SCROLL] CURSOR FOR Select_statement

Lnh m cursor:
OPEN cursor_name

Ly d liu t trong cursor:


FETCH NEXT FROM cursor_name INTO @variable1, @variable2,

Kim tra kt qu ly d liu t cursor (kim tra ngay sau lnh FETCH NEXT):

@@FETCH_STATUS = 0 : ly d liu thnh cng


@@FETCH_STATUS < 0 : khng ly c d liu.

ng cursor:
CLOSE cursor_name
DEALLOCATE cursor_name

3.2. V d
V d 1 : S dng cursor duyt d liu tr v t mt cu select
--Khai bo bin
Declare @btt int, @btt2 int
declare @c cursor
set @c = cursor for Select tt,tt2 From bang1 Where [iu kin]
--M cursor
open @c
fetch next from @c into @btt, @btt2
--Duyt cursor
while @@fetch_status = 0
begin

B mn H thng thng tin Khoa Cng ngh thng tin i hc Khoa hc t nhin

Bi thc hnh mn H qun tr CSDL


--S dng 2 bin @btt, @btt2. Sau , gi tip
fetch next from @c into @btt, @btt2, ...
end
--ng cursor
close @c ;
deallocate @c ;

V d 2 : S dng 2 cursor lng nhau


declare @c cursor
set @c = cursor for select top 2 ma_docgia from DocGia
open @c
declare @madg varchar(66)
fetch next from @c into @madg
while @@fetch_status =0
begin
print @madg ;
--cursor @c2 dung binh thuong o day
declare @c2 cursor ;
set @c2 = cursor for select top 4 ma_tuaSach from TuaSach ;
open @c2 ;
declare @mats varchar(66) ;
fetch next from @c2 into @mats ;
while @@fetch_status = 0
begin
print ' ' + @mats ;
fetch next from @c2 into @mats ;
end
close @c2 ;
deallocate @c2 ;
fetch next from @c into @madg ;
end
close @c
deallocate @c

B mn H thng thng tin Khoa Cng ngh thng tin i hc Khoa hc t nhin

Bi thc hnh mn H qun tr CSDL

4. Function
Trong SQL Server ta c th vit hm v ly gi tr tr v. Cc dng hm c th vit nh sau :

Hm tr v gi tr v hng (scalar value) : varchar, int, .

Hm tr v gi tr l bng tm (inline table-valued) : table

4.1. C php
CREATE FUNTIONS function_name
( [@parameter_name parameter_data_type] )
RETURNS [return Data-type] /*Returns c s */
AS
Begin
return [scalar value/select command]
End

4.2. V d
Vit hm tnh tui ca ngi c nm sinh l @ns :
--Xa hm nu c
if object_id('fTuoi','FN') is not null
drop function fTuoi
go
--To hm fTuoi
Create function fTuoi (@ns int)
Returns int
As
Begin
return year(getdate()) - @ns
end
go
--Bin dch hm vi F5
--Kim tra th hm
print dbo.fTuoi(1982) --phi c dbo.

Vit hm to bng tm t mt cu truy vn :


--Xa hm nu c
if object_id('fDSach','IF') is not null
drop function fDSach
go
--To hm, gi s trong CSDL ta c bng T(namsinh int)
Create function fDSach (@ns int) --phi t tham s vo du ngoc nhn
Returns table
As
Return (select * From T Where namsinh=@ns)
go

B mn H thng thng tin Khoa Cng ngh thng tin i hc Khoa hc t nhin

Bi thc hnh mn H qun tr CSDL


--Kim tra th hm
Select *
From fDSach(1982) -khng cn dbo.

5. Bi tp
1. Lm cc bi tp v Stored-procedure, Cursor, Trigger trong file Bai_tap_Chu_de_1_-

_StoreProcedure_-_Trigger_-_Function.pdf
2. Lm cc Store-procedure v trigger trong mc 4.1 4.13; 5.1 5.4 lin quan n CSDL Qun l th
vin trong file Dac_ta_CSDL_Quan_ly_thu_vien.pdf

B mn H thng thng tin Khoa Cng ngh thng tin i hc Khoa hc t nhin

You might also like