Professional Documents
Culture Documents
Cursor
Cursor
HCM
TRUNG TM TIN HC
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
TRUNG TM TIN HC
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
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
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
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
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
TRUNG TM TIN HC
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
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
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
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
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
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
TRUNG TM TIN HC
BI GII
--ng cursor CLOSE c_DONDH --Gii phng vng nh DEALLOCATE c_DONDH
15
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
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
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
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
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
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
TRUNG TM TIN HC
BI GII
--ng cursor CLOSE c_DONDH --Gii phng vng nh DEALLOCATE c_DONDH
22
TRUNG TM TIN HC
YU CU BI TP 3
Hin th theo mu
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)
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
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
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
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
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
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
TRUNG TM TIN HC
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
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
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
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
TRUNG TM TIN HC
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