DBA基础课程:Oracle PL/SQL显示游标、隐式游标、游标循环
最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!
我要咨询DBA基础课程:Oracle PL/SQL显示游标、隐式游标、游标循环
显示游标
使用游标顺序
1.声明游标
2.打开游标
3.读取游标
4.数据是否为空,是关闭游标,否继续读取
1.声明游标
cursor cur_name[(input_parameter1,input_parameter2...)]
[return ret_type]
is select_sentence;
input_parameter:para_name [in] datatype [{:= default|para_value}]
例子
cursor cur_orderinfo(ordercode in varchar2 := '0000000')
is select * from orderinfo where ordercode= ordercode;
这里的参数不可以指定长度,否则会报错
2.打开游标
open cur_name[(para_value[,para_value2]...)];
para_value:指定输入参数的值
open cur_orderinfo('11111111');
param_value是可选参数,如果未指定则用声明使用的默认值,如果指定了则用这里指定的值
3.读取游标
fetch cur_name into {variable};
例子:
var_orderinfo orderinfo%rowtype;
fetch cur_order into var_orderinfo;
如果有值的话,可以用var_orderinfo.orderid读取数据
4.关闭游标
close cur_name;
例子:
close cur_orderinfo;
游标的属性
1.%found 布尔型属性 ,如果SQL语句至少影响到一行数据,则该属性返回御前,否则返回false
2.%notfound 与%found属性相反
3.%rowcount 数字型属性,返回受SQL语句影响的行数
4.%isopen 布尔型属性,游标打开返回true,关闭返回false
例子:
set serveroutput on
declare
cursor cur_orderinfo (username in varchar2)
is select * from orderinfo where username= username;
var_orderinfo orderinfo%rowtype;
begin
open cur_orderinfo('abcd');
fetch cur_orderinfo into var_orderinfo;
while cur_orderinfo%found loop
dbms_output.put_line('订单编号:' || var_orderinfo.ordercode);
fetch cur_orderinfo into var_orderinfo;
end loop;
close cur_orderinfo;
exception
when others then
dbms_output.put_line('错误');
end;
隐式游标
在执行一个SQL语句时,Oracle会自动创建一个隐式游标。这个游标是内存中处理该语句的工作区域,隐式游标主要是处理数据操纵语句(如update,
delete语句)的执行结果,当然特殊情况下,也可以处理select语句的查询结果。由于隐式游标也有属性,当使用隐式游标属性时,需要在属性前面加上隐式
游标的默认名称--SQL。在实际编程中,经常使用隐式游标来判断更新数据行或删除数据行的情况。
set serveroutput on
begin
update orderinfo set mobilephone = '1111111111' where username = 'abcd';
if sql%notfound then
dbms_output.put_line('此用户不需要更新手机号码');
else
dbms_output.put_line('更新手机成功');
end if;
end;
通过for语句循环游标
1.for语句循环隐式游标
begin
for var_orderinfo in (select * from orderinfo)
loop
sql_sentences;
end loop;
end;
2.for语句循环显示游标
declare
cursor cur_orderinfo is select * from orderinfo;
begin
for var_orderinfo in cur_orderinfo
loop
sql_sentences;
end loop;
end;
for语句循环游标时,可以声明游标,但不用打开,读取,关闭游标。