(2)。使用IFELSE代替WHILE循环处理游标( e0 {2 ~: D4 G1 x
create or replace PROCEDURE PROC_STU2 AS* n* l0 m7 \4 q! I* ~4 U4 t2 @
BEGIN" X x$ P4 G F) J
--显示游标使用,使用if判断
0 B/ O3 b5 L! [) w declare+ S' ?- V( y t b, f7 J
--1.定义游标,名称为cur_stu+ p' m% m( R8 [5 Q4 g, b
cursor cur_stu is
1 K% B& |/ F2 ^+ _& T% k1 V- A2 a# p select stuno,stuname from student order by stuno;9 I# t+ v# Y9 s/ b) d8 S( q
--定义变量,存放游标取出的数据
`, A {3 f( z3 A, E v_stuno varchar(4);: T. g/ l1 P6 a6 E2 ^% p
v_stuname varchar(20);, \0 W0 ]/ ]3 k. t, P
begin
* D* s K& {% \ --2.打开游标cur_stu" t" F1 [- Z/ _' W
open cur_stu;& r# ^& |. H$ T5 K- Y: w+ Y( a% s
--3.将游标的当前行取出存放到变量中$ ] W6 n/ l, _ \6 O5 }! w- U
fetch cur_stu into v_stuno,v_stuname;
' W4 Z0 t7 X4 c% A1 W" }* X loop
' K( d7 X0 Q; J+ N( q if cur_stu%found then --如果游标cur_stu所指还有数据行
) F- q) c! |" y% w, K --打印结果
- k1 O8 A3 M8 K" h V" H dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);# F. [( H6 x6 g# S
--继续将游标所指的当前行取出放到变量中$ l! V* t, N, P) X2 l$ Z6 u) p
fetch cur_stu into v_stuno,v_stuname;# e; J' l/ q( R' T9 D1 e
else, o8 ]( |1 ?, |+ o
exit;
0 |2 M) ]8 n9 C/ Z7 N% [ end if;3 c6 `" y2 w& S# X! E. O8 `# D6 z
end loop;* d( ?' n, U, `0 f( [5 D4 @8 y: L
close cur_stu; --4.关闭游标" K- J1 K% I/ u3 [
end;
) ?: y% G0 [ B2 L& \5 h S3 J END PROC_STU2;7 j3 e/ K5 [$ M! e6 E$ q0 Y
(3)。使用FOR循环处理游标$ f) R5 v I+ V- G7 H; B' Z9 a
create or replace PROCEDURE PROC_STU3 AS
: I7 }5 ]3 i2 P w+ | _ BEGIN1 R: T% ]: S: r3 A; G. U2 M. p, q4 v
--显示游标使用,使用for循环
- h- h* a5 x& Q8 p/ G) j' l. B declare4 g& A d6 _: `. _
--定义游标,名称为cur_stu8 |, r" b7 E% R |1 a5 U9 s
cursor cur_stu is
2 z+ W) F5 r& ? select stuno,stuname from student order by stuno;
4 u' E' S# q, ` } begin E5 i: I, X2 _ x
for stu in cur_stu3 z& I% _8 ?6 `5 R9 f
loop8 J% q5 I- I8 x" s B
dbms_output.PUT_LINE(stu.stuno||'->'||stu.stuname);
; W# }# B! j7 K5 N" c! ~. X --循环做隐含检查 %notfound
) n8 r0 \' _$ I! ~% a, |2 O5 a end loop;+ p% B2 P" ]( u! N6 ?4 g W
--自动关闭游标" C- P) [$ i9 }& l
end;2 L7 i; X# |7 h7 o3 E
END PROC_STU3; |