You are on page 1of 36

TRNG I HC KHOA HC T NHIN TP.

HCM

TRUNG TM TIN HC

Minh ha x l vi CURSOR SQL SERVER

Trnh by c php S dng cursor x l theo mu tin hin hnh S dng tham s kiu cursor S dng cursor cp nht d liu S dng cursor ti my trm

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

C PHP KHAI BO CURSOR


DECLARE Tn_con_tr CURSOR [LOCAL | GLOBAL] [FORWARD_ONLY | SCROLL] [STATIC | DYNAMIC | KEYSET] [READ_ONLY | SCROLL_LOCK] FOR Cu_lnh_SELECT [FOR UPDATE [OF Danh_sch_ct_cp_nht]]

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

GiI THCH 1
Phm vi hot ng ca con tr LOCAL: cc b bn trong phm vi khai bo. V d nh th tc (procedure), l (batch), trigger GLOBAL: ton cc bn trong phm vi mt kt ni Nu khng ch ra th c xc nh bi thuc tnh CURSOR_DEFAULT ca CSDL

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

GiI THCH 2
Ch nh hng c d liu ca con tr FORWARD_ONLY: ch di chuyn theo chiu i ti SCROLL: c php di chuyn u (FIRST), trc (PRIOR), sau (NEXT), cui (LAST), Nu khng ch ra th mc nh l FORWARD_ONLY, tr khi c khai bo STATIC, KEYSET, DYNAMIC

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

GiI THCH 3
Cch thc d liu lu tr ca con tr STATIC: d liu lu tr l tnh, khng thay i khi d liu c s c s thay i DYNAMIC: d liu lu tr l ng, thay i khi d liu c s c s thay i KEYSET: gn ging DYNAMIC, ch thay i khi d liu c s c sa, cc thay i thm hoc xa s khng lm thay i d liu ca con tr

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

GiI THCH 4
READ_ONLY: d liu ca con tr ch cho c. Nu khai bo STATIC th xem READ_ONLY SCROLL_LOCK: ch nh SQL Server s mu tin khi cn sa hoc b i cc mu tin xa trn d liu c s php nh kha b

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

GiI THCH 5
FOR UPDATE: tt c cc ct trong cu SELECT u c th c cp nht OF Danh_sch_cc_ct: ch nh nhng ct no c php cp nht, ct khng bt buc phi c trong cu SELECT

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

C PHP LNH C D LiU


FETCH [NEXT | PRIOR | FIRST | LAST | ABSOLUTE n | RELATIVE n ] FROM Tn_con_tr INTO Danh_sch_bin

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

YU CU BI TP 1
S dng cursor hin th cc n t hng trong bng DONDH v c thm ct tng s phiu nhp

Phn tch yu cu Hng dn gii Bi gii


9

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

PHN TCH YU CU
Nhn xt
S dng cursor c bng DONDH Vng lp duyt cursor tnh tng s phiu nhp ca mt n t hng v in ra Nhc li: Khai bo cursor M cursor Vng lp duyt tng mu tin trong cursor x l ng cursor Gii phng vng nh cho cursor

Hng dn gii Bi gii


10

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

HNG DN GII
Khai bo cursor c_DONDH CURSOR FOR SELECT * FROM DONDH Vng lp duyt cursor c d liu v x l X l trong vng lp c dng hin hnh ra cc bin: @sodh, m cc phiu nhp ca @sodh In kt qu
Bi gii
11

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

BI GII
--Khai bo cursor DECLARE c_DONDH CURSOR FOR SELECT * FROM DONDH --Khai bo bin DECLARE @sodh CHAR(4),@ngaydh DATETIME,@manhacc CHAR(3) --M cursor OPEN c_DONDH

12

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

BI GII
--Bt u vng lp WHILE 0=0 BEGIN --c mu tin hin hnh trong cursor FETCH NEXT FROM c_DONDH INTO @sodh,@ngaydh,@manhacc --Nu b li th thot khi vng lp IF @@FETCH_STATUS<>0 BREAK --Tnh tng s phiu nhp --In ra kt qu END

13

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

BI GII
--Tnh tng s phiu nhp DECLARE @dem INT SELECT @dem=COUNT(*) FROM PNHAP WHERE sodh=@sodh --In ra kt qu PRINT @sodh + ' | ' + CONVERT(CHAR(10),@ngaydh,103) + ' | ' + @manhacc + ' | ' + CAST(@dem AS CHAR(3))

14

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

BI GII
--ng cursor CLOSE c_DONDH --Gii phng vng nh DEALLOCATE c_DONDH

15

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

YU CU BI TP 2
S dng cursor hin th cc n t hng trong bng DONDH c thm ct ghi ch bit rng nu c nhp hng th in ra C x phiu nhp hng, ngc li nu cha c nhp hng th in ra Cha c nhp hng

Phn tch yu cu Hng dn gii Bi gii


16

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

PHN TCH YU CU
Nhn xt
S dng cursor c bng DONDH Vng lp duyt cursor m s phiu nhp ca mt n t hng v in ra

Hng dn gii Bi gii


17

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

HNG DN GII
Khai bo cursor c_DONDH CURSOR FOR SELECT * FROM DONDH Vng lp duyt cursor c d liu v x l X l trong vng lp c dng hin hnh ra cc bin: @sodh, m cc phiu nhp ca @sodh In kt qu
Bi gii
18

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

BI GII
--Khai bo cursor DECLARE c_DONDH CURSOR FOR SELECT * FROM DONDH --Khai bo bin DECLARE @sodh CHAR(4),@ngaydh DATETIME,@manhacc CHAR(3) --M cursor OPEN c_DONDH

19

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

BI GII
--Bt u vng lp WHILE 0=0 BEGIN --c mu tin hin hnh trong cursor FETCH NEXT FROM c_DONDH INTO @sodh,@ngaydh,@manhacc --Nu b li th thot khi vng lp IF @@FETCH_STATUS<>0 BREAK --m s phiu nhp --In ra kt qu END

20

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

BI GII
--m s phiu nhp DECLARE @dem INT SELECT @dem=COUNT(*) FROM PNHAP WHERE sodh=@sodh --In ra kt qu DECLARE @ghichu VARCHAR(100) IF @dem>0 SET @ghichu=C ' + CAST(@dem AS CHAR(3)) + ' phiu nhp hng' ELSE SET @ghichu='Cha c nhp hng' PRINT @sodh + ' | ' + CONVERT(CHAR(10),@ngaydh,103) + ' | ' + @manhacc + ' | ' + CAST(@dem AS CHAR(3))
21

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

BI GII
--ng cursor CLOSE c_DONDH --Gii phng vng nh DEALLOCATE c_DONDH

22

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

YU CU BI TP 3
Hin th theo mu

Phn tch yu cu Hng dn gii Bi gii


23

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

PHN TCH YU CU
Nhn xt
S dng cursor c bng DONDH v bng NHACC (c tn nh cung cp) Vng lp duyt cursor c mi n t hng v x l X l: to danh sch cc phiu nhp ca mt n t hng s dng thm mt cursor c bng PNHAP v lc cc phiu nhp theo s t hng Trong cursor s c cursor (hai cursor lng nhau)

Hng dn gii Bi gii


24

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

HNG DN GII
Khai bo cursor th nht c_DONDH CURSOR FOR SELECT * FROM DONDH NHACC Vng lp 1: duyt cursor c d liu v x l X l trong vng lp 1 c dng hin hnh ra cc bin: @sodh, Xc nh danh sch phiu nhp ca @sodh In kt qu

25

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

HNG DN GII
Khai bo cursor th hai c_PNHAP CURSOR FOR SELECT * FROM PNHAP WHERE sodh=@sodh Vng lp 2: duyt cursor c d liu v x l X l trong vng lp 2 c dng hin hnh ra bin: @sopn To danh sch cc s phiu nhp @danhsach = @danhsach + @sopn + ,

Bi gii
26

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

BI GII
--Khai bo cursor c_DONDH DECLARE c_DONDH CURSOR FOR SELECT a.sodh,ngaydh,tennhacc FROM DONDH a INNER JOIN NHACC b ON a.manhacc=b.manhacc --Khai bo bin DECLARE @sodh CHAR(4),@ngaydh DATETIME, @tennhacc VARCHAR(100)

27

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

BI GII
--Vng lp 1: duyt trn cursor c_DONDH WHILE 0=0 BEGIN --c mu tin hin hnh trong cursor FETCH NEXT FROM c_DONDH INTO @sodh,@ngaydh,@tennhacc --Nu b li th thot khi vng lp IF @@FETCH_STATUS<>0 BREAK --Xc nh danh sch phiu nhp ... --In ra kt qu PRINT @sodh,@ngaydh,@tennhaccc END
28

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

BI GII
--Khai bo cursor c_PNHAP l cc phiu nhp ca D001 DECLARE c_PNHAP CURSOR FOR SELECT sopn FROM PNHAP WHERE sodh=D001 --Khai bo bin DECLARE @sopn CHAR(4),@danhsach VARCHAR(100)

29

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

BI GII
--Vng lp 2: duyt trn cursor c_PNHAP WHILE 0=0 BEGIN --c mu tin hin hnh trong cursor FETCH NEXT FROM c_PNHAP INTO @sopn --Nu b li th thot khi vng lp IF @@FETCH_STATUS<>0 BREAK --To chui cc phiu nhp --> bin @danhsach SET @danhsach=@danhsach + @sopn + ', END

30

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

BI GII HON CHNH


--Phi hp vng lp 1 v vng lp 2 --Vng lp 1: duyt mi n t hng WHILE 0=0 BEGIN --c mu tin hin hnh trong cursor FETCH NEXT FROM c_DONDH INTO @sodh,@ngaydh,@tennhacc --Nu b li th thot khi vng lp IF @@FETCH_STATUS<>0 BREAK --Vng lp 2: xc nh danh sch phiu nhp ... --In ra kt qu PRINT @sodh,@ngaydh,@tennhaccc,@danhsach END
31

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

YU CU BI TP 4
Xy dng th tc tn spud_VATTU_BCao gm c mt tham s vo l: n v tnh v mt tham s ra l: cursor cha danh sch cc vt t c lc theo n v tnh truyn vo

Hng dn gii Bi gii


32

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

HNG DN GII
Tham s vo Tham s ra X l @dvtinh NVARCHAR(10) @cur_DSVT CURSOR VARYING OUTPUT Khai bo cursor M cursor

Bi gii
33

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

YU CU BI TP 5
S dng cursor gim 10% n gi nhp ca cc chi tit nhp cho phiu nhp N001

Hng dn gii Bi gii


34

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

HNG DN GII
Khai bo cursor c_CTPNHAP CURSOR FOR SELECT sopn,mavtu,dgnhap FROM CTPNHAP WHERE sopn=N001 FOR UPDATE OF dgnhap X l trong vng lp c dng hin hnh ra cc bin: @sopn, X l cp nht:
UPDATE WHERE CURRENT OF c_CTPNHAP

Bi gii
35

TRNG I HC KHOA HC T NHIN TP.HCM

TRUNG TM TIN HC

Ti liu tham kho

Gio trnh SQL Server 2005 Trn Xun Hi, Nguyn Tin Dng (Trung Tm Tin Hc H Khoa Hc T Nhin TP. HCM) SQL Server Books Online

36

You might also like