You are on page 1of 36

TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.

HCM
TRUNG TÂM TIN HӐC

Minh hӑa xӱ lý vӟi CURSOR ±


SQL SERVER
‡ Trình bày cú pháp
‡ Sӱ dөng cursor đӇ xӱ lý theo mҭu tin hiӋn hành
‡ Sӱ dөng tham sӕ kiӇu cursor
‡ Sӱ dөng cursor đӇ cұp nhұt dӳ liӋu
‡ Sӱ dөng cursor tҥi máy trҥm

|
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

CÚ PHÁP KHAI BÁO CURSOR


DECLARE Tên_con_trӓ CURSOR
[LOCAL | GLOBAL]
[FORWARD_ONLY | SCROLL]
[STATIC | DYNAMIC | KEYSET]
[READ_ONLY | SCROLL_LOCK]
FOR Câu_lӋnh_SELECT
[FOR UPDATE [OF Danh_sách_cӝt_cұp_nhұt]]

Ë
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

GiҦI THÍCH 1
Phҥm vi hoҥt đӝng cӫa con trӓ
LOCAL: cөc bӝ bên trong phҥm vi khai báo. Ví dө
như thӫ tөc (procedure), lô (batch), trigger
GLOBAL: toàn cөc bên trong phҥm vi mӝt kӃt nӕi
NӃu không chӍ ra thì đưӧc xác đӏnh bӣi thuӝc tính
CURSOR_DEFAULT cӫa CSDL

'
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

GiҦI THÍCH 2
ChӍ đӏnh hưӟng đӑc dӳ liӋu cӫa con trӓ
FORWARD_ONLY: chӍ di chuyӇn theo chiӅu đi tӟi
SCROLL: đưӧc phép di chuyӇn đҫu (FIRST),
trưӟc (PRIOR), sau (NEXT), cuӕi (LAST), «

NӃu không chӍ ra thì mһc đӏnh là


FORWARD_ONLY, trӯ khi có khai báo STATIC,
KEYSET, DYNAMIC

€
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

GiҦI THÍCH 3
Cách thӭc dӳ liӋu lưu trӳ cӫa con trӓ
STATIC: dӳ liӋu lưu trӳ là tĩnh, không thay đәi khi
dӳ liӋu cơ sӣ có sӵ thay đәi
DYNAMIC: dӳ liӋu lưu trӳ là đӝng, thay đәi khi dӳ
liӋu cơ sӣ có sӵ thay đәi
KEYSET: gҫn giӕng DYNAMIC, chӍ thay đәi khi dӳ
liӋu cơ sӣ có sӱa, các thay đәi thêm hoһc xóa sӁ
không làm thay đәi dӳ liӋu cӫa con trӓ

O
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

GiҦI THÍCH 4
READ_ONLY: dӳ liӋu cӫa con trӓ chӍ cho phép
đӑc. NӃu khai báo STATIC thì xem như
READ_ONLY
SCROLL_LOCK: chӍ đӏnh SQL Server sӁ khóa
mҭu tin khi cҫn sӱa hoһc bӓ đi các mҭu tin đã bӏ
xóa trên dӳ liӋu cơ sӣ

ð
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

GiҦI THÍCH 5
FOR UPDATE: tҩt cҧ các cӝt trong câu SELECT
đӅu có thӇ đưӧc cұp nhұt
OF Danh_sách_các_cӝt: chӍ đӏnh nhӳng cӝt nào
đưӧc phép cұp nhұt, cӝt không bҳt buӝc phҧi có
trong câu SELECT


TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

CÚ PHÁP LӊNH ĐӐC DӲ LiӊU


FETCH [NEXT | PRIOR | FIRST | LAST
| ABSOLUTE n
| RELATIVE n ]
FROM Tên_con_trӓ
INTO Danh_sách_biӃn

z
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

ÚÊU CҪU BÀI TҰP 1


Sӱ dөng cursor đӇ hiӇn thӏ các đơn đһt hàng trong
bҧng DONDH và có thêm cӝt tәng sӕ phiӃu nhұp

Phân tích yêu cҫu


Ôưӟng dүn giҧi
ҧ

Ö
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

PHÂN TÍCH ÚÊU CҪU


Nhұn xét Sӱ dөng cursor đӇ đӑc bҧng DONDH
Vòng lһp duyӋt cursor đӇ tính tәng sӕ phiӃu nhұp cӫa mӝt
đơn đһt hàng và in ra
Nhҳc lҥi:
Khai báo cursor
Mӣ cursor
Vòng lһp duyӋt tӯng mҭu tin trong cursor đӇ xӭ lý
Đóng cursor
Giҧi phóng vùng nhӟ cho cursor

Ôưӟng dүn giҧi


ҧ

|
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

HƯӞNG DҮN GIҦI


Khai báo cursor
c_DONDH CURSOR
FOR SELECT * FROM DONDH
Vòng lһp duyӋt cursor đӇ đӑc dӳ liӋu và xӱ lý
Xӱ lý trong Đӑc dòng hiӋn hành ra các biӃn: @sodh,«
vòng lһp
ĐӃm các phiӃu nhұp cӫa @sodh

In kӃt quҧ

ҧ

||
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

BÀI GIҦI
 




 Ӄ

!"€#$ %&!($ )

"'#

ӣ

*



TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

BÀI GIҦI
+ҳ,-ҫ ./%0һ1
2( 3
+4(
5ӑ
)ҭ ,Ӌ6, %

7 

( !$ %&!$ )

Ӄ ӏ 0ӛ,8, ,9ӓ./%0һ1


( :;
+
<,ә% ӕ 1Ӄ ұ1=
( 9Ӄ,> ҧ =


|'
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

BÀI GIҦI
<,ә% ӕ 1Ӄ ұ1
 !?)(
 !?)3"#
**
2 !3 !

( 9Ӄ,> ҧ
*( ! @ABA@C""| #$ %&!$| '#
@ABA@ )

@ABA@" !?) "'##


TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

BÀI GIҦI
5D%




4ҧ1D%.E%ӟ



|O
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

ÚÊU CҪU BÀI TҰP 2


Sӱ dөng cursor đӇ hiӇn thӏ các đơn đһt hàng trong
bҧng DONDH có thêm cӝt ghi chú biӃt rҵng nӃu
đã có nhұp hàng thì in ra ³Có x phiӃu nhұp hàng´,
ngưӧc lҥi nӃu chưa có nhұp hàng thì in ra ³Chưa
có nhұp hàng´

Phân tích yêu cҫu


Ôưӟng dүn giҧi
ҧ


TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

PHÂN TÍCH ÚÊU CҪU


Nhұn xét Sӱ dөng cursor đӇ đӑc bҧng DONDH
Vòng lһp duyӋt cursor đӇ đӃm sӕ phiӃu nhұp cӫa mӝt đơn
đһt hàng và in ra

Ôưӟng dүn giҧi


ҧ

|
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

HƯӞNG DҮN GIҦI


Khai báo cursor
c_DONDH CURSOR
FOR SELECT * FROM DONDH
Vòng lһp duyӋt cursor đӇ đӑc dӳ liӋu và xӱ lý
Xӱ lý trong Đӑc dòng hiӋn hành ra các biӃn: @sodh,«
vòng lһp
ĐӃm các phiӃu nhұp cӫa @sodh

In kӃt quҧ

ҧ

|z
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

BÀI GIҦI
 




 Ӄ

!"€#$ %&!($ )

"'#

ӣ

*



TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

BÀI GIҦI
+ҳ,-ҫ ./%0һ1
2( 3
+4(
5ӑ
)ҭ ,Ӌ6, %

7 

( !$ %&!$ )

Ӄ ӏ 0ӛ,8, ,9ӓ./%0һ1


( :;
+
5Ӄ) ӕ 1Ӄ ұ1=
( 9Ӄ,> ҧ =


Ë
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

BÀI GIҦI
5Ӄ) ӕ 1Ӄ ұ1
 !?)(
 !?)3"#
**
2 !3 !

( 9Ӄ,> ҧ
 %
 C"| #
( !?);
 %
 3Fӓ A@" !?)"'##
@A1Ӄ ұ16%A

 %
 3Aư
Dұ16%A
*( ! @ABA@C""| #$ %&!$| '#
@ABA@ )

@ABA@" !?) "'##


Ë|
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

BÀI GIҦI
5D%




4ҧ1D%.E%ӟ



ËË
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

ÚÊU CҪU BÀI TҰP 3


HiӇn thӏ theo mүu

Phân tích yêu cҫu


Ôưӟng dүn giҧi
ҧ

Ë'
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

PHÂN TÍCH ÚÊU CҪU


Nhұn xét Sӱ dөng cursor đӇ đӑc bҧng DONDH và bҧng NHACC (có
tên nhà cung cҩp)
Vòng lһp duyӋt cursor đӇ đӑc mӛi đơn đһt hàng và xӱ lý

Xӱ lý: tҥo danh sách các phiӃu nhұp cӫa mӝt đơn đһt hàng
, sӱ dөng thêm mӝt cursor đӇ đӑc bҧng PNHAP và lӑc các
phiӃu nhұp theo sӕ đһt hàng
, Trong cursor sӁ có cursor (hai cursor lӗng nhau)

Ôưӟng dүn giҧi


ҧ

ˀ
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

HƯӞNG DҮN GIҦI


Khai báo cursor thӭ nhҩt
c_DONDH CURSOR
FOR SELECT * FROM DONDH ,, NHACC
Vòng lһp 1: duyӋt cursor đӇ đӑc dӳ liӋu và xӱ lý
Xӱ lý trong Đӑc dòng hiӋn hành ra các biӃn: @sodh,«
vòng lһp 1
Xác đӏnh danh sách phiӃu nhұp cӫa @sodh

In kӃt quҧ

ËO
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

HƯӞNG DҮN GIҦI


Khai báo cursor thӭ hai
c_PNHAP CURSOR
FOR SELECT * FROM PNHAP WHERE sodh=@sodh
Vòng lһp 2: duyӋt cursor đӇ đӑc dӳ liӋu và xӱ lý
Xӱ lý trong Đӑc dòng hiӋn hành ra biӃn: @sopn
vòng lһp 2
Tҥo danh sách các sӕ phiӃu nhұp
@danhsach = @danhsach + @sopn + µ,¶

ҧ

Ëð
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

BÀI GIҦI
 



 
G !$%&!$,?

(H(
G)

3G)

 Ӄ
 !"€#$ %&!($
,?

C"| #

Ë
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

BÀI GIҦI
C/%0һ1|I! &Ӌ,, J


2( 3
+4(
5ӑ
)ҭ ,Ӌ6, %

7 
(
!$ %&!$ ,?

Ӄ ӏ 0ӛ,8, ,9ӓ./%0һ1


( :;
+
7
-ӏ! 
1Ӄ ұ1GGG

( 9Ӄ,> ҧ =
*( !$ %&!$ ,?



Ëz
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

BÀI GIҦI
 

**06

1Ӄ ұ1
ӫ |

** 
 1
**
2 !3F |K

 Ӄ
 1"€#$ ! 
C"| #

ËÖ
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

BÀI GIҦI
C/%0һ1ËI! &Ӌ,, J

**
2( 3
+4(
5ӑ
)ҭ ,Ӌ6, %

7
**( 1
Ӄ ӏ 0ӛ,8, ,9ӓ./%0һ1
( :;
+
ҥ 
 ӛ

1Ӄ ұ1;Ӄ ! 

 ! 
3 ! 
@ 1@A$F


'
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

BÀI GIҦI HOÀN CHӌNH


*ӕӧ1./%0һ1|.6./%0һ1Ë
C/%0һ1|I! &Ӌ,)ӛ-ơ-һ,6%
2( 3
+4(
5ӑ
)ҭ ,Ӌ6, %

7 
(
!$ %&!$ ,?

Ӄ ӏ 0ӛ,8, ,9ӓ./%0һ1


( :;
+
C/%0һ1ËIL
-ӏ! 
1Ӄ ұ1GGG

( 9Ӄ,> ҧ =
*( !$ %&!$ ,?

$ ! 


'|
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

ÚÊU CҪU BÀI TҰP 4


Xây dӵng thӫ tөc tên spud_VATTU_BCao gӗm có
mӝt tham sӕ vào là: Đơn vӏ tính và mӝt tham sӕ ra
là: cursor chӭa danh sách các vұt tư có lӑc theo
đơn vӏ tính truyӅn vào

Ôưӟng dүn giҧi


ҧ


TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

HƯӞNG DҮN GIҦI


Tham sӕ vào @dvtinh NVARCHAR(10)

Tham sӕ ra
@cur_DSVT CURSOR VARYING OUTPUT

Xӱ lý Khai báo cursor


Mӣ cursor

ҧ

''
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

ÚÊU CҪU BÀI TҰP 5


Sӱ dөng cursor đӇ giҧm 10% đơn giá nhұp cӫa
các chi tiӃt nhұp cho phiӃu nhұp N001

Ôưӟng dүn giҧi


ҧ


TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

HƯӞNG DҮN GIҦI


Khai báo cursor
c_CTPNHAP CURSOR
FOR SELECT sopn,mavtu,dgnhap FROM CTPNHAP
WHERE sopn=µN001¶ FOR UPDATE OF dgnhap
Xӱ lý trong Đӑc dòng hiӋn hành ra các biӃn: @sopn,«
vòng lһp
Xӱ lý cұp nhұt:
UPDATE « WHERE CURRENT OF c_CTPNHAP

ҧ

'O
TRƯӠNG ĐҤI HӐC KHOA HӐC TӴ NHIÊN TP.HCM
TRUNG TÂM TIN HӐC

Tài liӋu tham khҧo

‡ Giáo trình SQL Server 2005 ±


Trҫn Xuân Hҧi, NguyӉn TiӃn Dũng
(Trung Tâm Tin Hӑc ± ĐH Khoa Hӑc Tӵ Nhiên
TP. HCM)
‡ SQL Server Books Online

You might also like