ORACLE是怎样使用游标的

上一篇 / 下一篇  2009-01-03 21:24:38 / 个人分类:Oracle

  • 文件版本: V1.0
  • 开发商: 本站原创
  • 文件来源: 本地
  • 界面语言: 简体中文
  • 授权方式: 免费
  • 运行平台: Win9X/Win2000/WinXP
一 游标是什么
qnw [,_7QM0游标字面理解就是游动的光标。
0N+o5X&@ \5a0数据库语言来描述:游标是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了,将游标放置到某行后,即可对该行数据进行操作,例如提取当前行的数据等。
#_5M9g3^q1X0二 游标的分类
-ou:KIzr0显式游标和隐式游标51Testing软件测试网A^(A0\oI9e
显式游标的使用需要4步:51Testing软件测试网A:D8|(BI;Z
1. 声明游标51Testing软件测试网"L l gv8MtL&i
CURSOR mycur(vartype number) is
Y1n)E$Rje n7T7m0select emp_no,emp_zc from cus_emp_basic
9g V up9n3|0where com_no = vartype;
xQE?+Z s&`@02. 打开游标
YoYk}B:Htop0open mycur(000627)
7~'PiT(oF0注:000627是参数51Testing软件测试网f8b ]SV8L(fn^-t
3. 读取数据
BM_|7tC F G0fetch mycur into varno, varprice;51Testing软件测试网1?m1U XI;y/b
4. 关闭游标
:C^{G;G!Ca0close mycur;
i:i8Bi,[Z0三 游标的属性
6Oh f-Z A0oracle 游标有4个属性:%ISOPEN,%FOUND,%NOTFOUND,%ROWCOUNT。
9h`4J:xS)Q4o+m ?0%ISOPEN判断游标是否被打开,如果打开%ISOPEN等于true,否则等于false;51Testing软件测试网Q%C*L3}"A Z;{
%FOUND %NOTFOUND判断游标所在的行是否有效,如果有效,则%FOUNDD等于true,否则等于false;51Testing软件测试网[F2~QT }A}
%ROWCOUNT返回当前位置为止游标读取的记录行数。
1q-dbb*gL0四 示例51Testing软件测试网7q qv~&pm
set serveroutput on;51Testing软件测试网T.OJGEQ
declare51Testing软件测试网/Y$l;u6g6Aul6J:_
varno varchar2(20);
!b.SE4sj;S WN0varprice varchar2(20);
!J |1m3VMl&m0CURSOR mycur(vartype number) is
V`4j|F$I.S@9N%S0select emp_no,emp_zc from cus_emp_basic51Testing软件测试网 n'eX c Tv4WY
where com_no = vartype;51Testing软件测试网x3z-qWd3_*d$G
begin
jBe)W7j!cE8w7I0if mycur%isopen = false then
|Z%es7H+wiN:t ~z"V0open mycur(000627);
8d7wksg6A0end if;
L8`#k g })hQ0fetch mycur into varno,varprice;
|U,OK!?%{[/f)rds3n0while mycur%found
*a'UL`(RoB0loop
^%P,js0z0dbms_output.put_line(varno||','||varprice);
4} Z tEC0if mycur%rowcount=2 then
n(RO;c/X7m X0exit;
'L4Q\w4F#xo/U.R0end if;
-s4Hk _H0?eB&`0fetch mycur into varno,varprice;51Testing软件测试网I y x G(e,]Q
end loop;51Testing软件测试网VD,HE#~!T$b0_5J(l3U'?B
close mycur;
j {R~ZS0end;
%z#b,f&d(uA)S*~9|0PL/SQL记录的结构和C语言中的结构体类似,是由一组数据项构成的逻辑单元。51Testing软件测试网s9m ~g)VQ pTV @#D
PL/SQL记录并不保存在数据库中,它与变量一样,保存在内存空间中,在使用记录时候,要首先定义记录结构,然后声明记录变量。可以把PL/SQL记录看作是一个用户自定义的数据类型。51Testing软件测试网"vFx7Kx-BMq
set serveroutput on;51Testing软件测试网!A_7g;N$H)R9V
declare
8\Y%b/ka4G0type person is record51Testing软件测试网L Tq5\8Qh(L3] m
(51Testing软件测试网h,ve3}A3{(["S
empno cus_emp_basic.emp_no%type,
Os M"f0D0empzc cus_emp_basic.emp_zc%type);
H{G"B5Z m}9r.q0person1 person;51Testing软件测试网0U)i i,s l3S?
cursor mycur(vartype number)is51Testing软件测试网/J|mDV*U,aC,u
select emp_no,emp_zc from cus_emp_basic51Testing软件测试网9_'hT/WP4@~S
where com_no=vartype;
'RC7ez-c6i4^N0begin
c,p1a,v:h+Y6G0if mycur%isopen = false then
e"W V^w.|0open mycur(000627);51Testing软件测试网NNu tF%qW;I'{
end if;51Testing软件测试网$_J(Ms*H&p.y
loop
9?5RG:xNv0fetch mycur into person1;
,qoX'F q$\N%o8A1@7Y3O0exit when mycur%notfound;51Testing软件测试网R(CH([9wJ#?vD
dbms_output.put_line('雇员编号:'||person1.empno||',地址:'||person1.empzc);51Testing软件测试网G7At[)k6d#z
end loop;51Testing软件测试网q)pe@J
close mycur;51Testing软件测试网 W*L:Y:hT3MWs
end;
P|E,Z*B|0典型游标for 循环
_0Z!F~}h$I1V0游标for循环示显示游标的一种快捷使用方式,它使用for循环依次读取结果集中的行数据,当form循环开始时,游标自动打开(不需要open),每循环一次系统自动读取游标当前行的数据(不需要fetch),当退出for循环时,游标被自动关闭(不需要使用close)。使用游标for循环的时候不能使用open语句,fetch语句和close语句,否则会产生错误。
2@b iJ_Tu0set serveroutput on;
D s*m | n(tOE4lF0declare
FN,MKzdqV0cursor mycur(vartype number)is51Testing软件测试网#[2wj r)TO%XT
select emp_no,emp_zc from cus_emp_basic51Testing软件测试网2dO;t_k!H c#^}}
where com_no=vartype;
Z-Ed+NN5ih@(xe0begin
SX,TJT F I9vI,},y7n0for person in mycur(000627) loop51Testing软件测试网V4lF{7^
dbms_output.put_line('雇员编号:'||person.emp_no||',地址:'||person.emp_zc);
)y-uJh)r.n0end loop;51Testing软件测试网#dY/u^j(AzJ
end;

TAG: Oracle

 

评分:0

我来说两句

Open Toolbar