ORACLE认证PLSQL:游标学习
游标
游标是指向上下文区域的句柄或指针
上下文区域--用于SQL处理的内存区
上下文区域的内容
语句处理的行数
指向语句的语法分析表示的指针
游标的类型
1、静态游标
隐式游标
显示游标
2、REF游标(动态游标)
一、隐式游标
有ORACLE在内部声明
用于处理
DML语句
返回单行的查询
游标属性
1、%NOTFOUND 对数据操作成功返回FALSE,否则返回TRUE
2、%FOUND 对数据操作成功返回TRUE,否则返回FALSE
3、%ROWCOUNT 游标影响的行数
4、%ISOPEN 游标是否打开
begin
insert into cities values(‘aaa‘,‘bbb‘);
DBMS_OUTPUT.PUT_LINE(‘游标所影响的行数:‘||SQL%ROWCOUNT);
if SQL%NOTFOUND then
DBMS_OUTPUT.PUT_LINE(‘NOTFOUND为真‘);
else
DBMS_OUTPUT.PUT_LINE(‘NOTFOUND为假‘);
end if;
if SQL%FOUND then
DBMS_OUTPUT.PUT_LINE(‘FOUND为真‘);
else
DBMS_OUTPUT.PUT_LINE(‘FOUND为假‘);
end if;
if SQL%ISOPEN then
DBMS_OUTPUT.PUT_LINE(‘ISOPEN为真‘);
else
DBMS_OUTPUT.PUT_LINE(‘ISOPEN为假‘);
end if;
end;
输出结果为
游标所影响的行数:1
NOTFOUND为假
FOUND为真
ISOPEN为假
declare
icount int :=0;
begin
insert into cities values (‘aaa‘,‘bbb‘);
if SQL%NOTFOUND then
DBMS_OUTPUT.PUT_LINE(‘没有插入成功‘);
else
DBMS_OUTPUT.PUT_LINE(‘插入成功‘);
end if;
commit;
end;
输出结果为
插入成功
declare
icount int :=0;
begin
update cities set country=‘aaaa‘;
if SQL%NOTFOUND then
DBMS_OUTPUT.PUT_LINE(‘没有更新成功‘);
else
DBMS_OUTPUT.PUT_LINE(‘更新成功‘);
end if;
commit;
end;
输出结果为
更新成功
二、显式游标
由用户显式声明
游标将指向活动集中的当前行
控制显示游标
Open
Fetch
Close
declare
cursor empCur is select * from emp;
emprow emp%ROWTYPE;
begin
open empCur;
fetch empCur into emprow;
DBMS_OUTPUT.put_line(emprow.empno||‘ ‘||emprow.ename);
close empCur;
end;
输出结果
7369 SMITH
loop循环
declare
cursor empCur is select * from emp;
emprow emp%ROWTYPE;
begin
open empCur;
loop
fetch empCur into emprow;
DBMS_OUTPUT.put_line(emprow.empno||‘ ‘||emprow.ename);
DBMS_OUTPUT.put_line(‘提取了‘||empCur%ROWCOUNT||‘行‘);
--exit when empCur%NOTFOUND;
if empCur%NOTFOUND then
exit ;
end if;
end loop;
close empCur;
end;