</p> end TEST;7 g [9 Q3 T J7 \4 V
例子1:有参数,使用循环,无须打开关闭,本人这种方式
: b0 e7 u: f9 _0 b5 m& T9 Q! W. } x create or replace procedure TEST is# B1 Q% L6 x" S+ l
cursor c1(pname in varchar2) is
( l$ q7 J1 ?. ~2 l9 A* b select tname from tab where tname like pname;6 X' I" a4 N8 B) z! k a
begin
+ q- u" K' y1 l for rr in c1('T%') loop, K" a" i7 C1 d! F
dbms_output.put_line(rr.tname);1 ^$ _2 G+ Q) Z o
end loop;( e7 K" C$ v2 u# O$ w7 n, i y6 M! w
end TEST;& {- P; x4 \, K0 M$ _6 k3 [
1.3游标常用属性:8 J! j# j$ V! M: G, g' o
%FOUND:变量最后从游标中获取记录的时候,在结果集中找到了记录。. r( X/ K6 Y% G" Z4 l6 o% {
%NOTFOUND:变量最后从游标中获取记录的时候,在结果集中没有找到记录。
4 |$ T s% n! D) U2 c! G; e %ROWCOUNT:当前时刻已经从游标中获取的记录数量。, Z6 g4 k d7 K- |
%ISOPEN:是否打开。2 X; {' f- o$ Q1 X# F
Declare /* /* 定义静态游标 */ */
3 t8 K! Z% }# n! `. O! M Cursor emps is1 v' {$ G N; _- U4 t" R( y# M
Select * from employees where rownum < 6 order by 1;) J. z) v/ i1 ], u& c' |, E
Emp employees%rowtype;
+ X, K- D' i8 Q Row number := 1;; f5 t, C4 g( H0 C
Begin
, L/ [/ m% O( y4 |; n: s Open emps; /* ?打开静态游标 */
; `2 R+ a( p. G- Z: G# X Fetch emps; v5 O8 ~7 u/ d& O! B7 j' x
into emp; /* 读取游标当前行 */ J p& s0 E# a! X* v& K! P
Loop& U+ k* N3 D0 }8 }4 O8 v7 R
If emps%found then
1 ]1 s' a( b" F5 m) E Dbms_output.put_line('Looping over record ' || row || ' of ' ||
# _2 _( ~ p* j7 h8 m1 o emps%rowcount);
6 X+ ?7 z4 l5 h Fetch emps
4 O( N/ y: \9 k- U, M* k8 }' i" d into emp;% Q4 [- D. o% t! |( i: {
Row := row + 1;
& J, \. R% h# h& Y) V Elsif emps%notfound then. c3 x2 q1 Z5 q8 @, ^
Exit;
5 X! U n3 w+ s9 N q End if;: K; y9 D# k/ }* }
End loop;
; @2 a& }* r" ~5 v3 h If emps%isopen then" W+ x6 o! U( P, E5 X; S0 k
Close emps; /* 关闭游标 */
/ I; l. I- p9 n- D) U1 I6 x7 r8 B End if;
& [' j7 s0 j; G: g7 O& z End;" B& i; l( i, a: y0 S" a' H
/ |