当前位置: Oracle DBA培训网-优技培训 >> dba培训 > DBA培训教程 >

dba培训教程:Oracle PL/SQL显示游标、隐式游标、游标循环

dba培训教程:Oracle PL/SQL显示游标、隐式游标、游标循环

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语句循环游标时,可以声明游标,但不用打开,读取,关闭游标。

技术沙龙MORE+

标签错误:<!-- #Label# labelId=20160707140604 moduleId=1 classId=12231768634 orderby=2 fields=url,title,u_info attribute= datatypeId=22192428132 recordCount=3 pageSize= <htmlTemplate><dt><img src="/images/index_26${index}.jpg" width="100" height="62" /><a href="$url" title="${title}">${title}</a><span>${api.left(u_info,60)}</span></dt></htmlTemplate> -->
我要参加技术沙龙