declare
cursor user_cur
is select *
from my_user;
user_row my_user%rowtype;
begin
open user_cur;
loop
fetch user_cur into user_row;
exit when user_cur%notfound;
dbms_output.put_line(user_row.user_id||'----'||user_row.name);
end loop;
close user_cur;
end;
declare
cursor user_cur
is select *
from my_user;
row_user my_user%rowtype;
begin
open user_cur;
loop
fetch user_cur into row_user;
exit when user_cur%notfound;
dbms_output.put_line(row_user.user_id||'----'||row_user.name||'----'||row_user.age);
end loop;
close user_cur;
end;
declare
cursor row_user
is select *
from my_user;
type my_user_tab is table of my_user%rowtype;
/*
定义和表my_user行对象一致的集合类型cur_row_user,
用于存放批量得到的数据
*/
cur_row_user my_user_tab;
begin
open row_user;
loop
/*从结果集中提取数据,每次提取两行*/
fetch row_user bulk collect into cur_row_user limit 2;
/*遍历集合cur_row_user中的数据*/
for i in 1..cur_row_user.count loop
dbms_output.put_line(cur_row_user(i).user_id||'----'||cur_row_user(i).name||'----'||cur_row_user(i).age);
end loop;
exit when row_user%notfound;
end loop;
close row_user;
end;
declare
cursor user_cur
is select *
from my_user;
type my_user_tab is table of my_user%rowtype;
/*
定义和表my_user行对象一致的集合类型cur_user_cur,
用于存放批量得到的数据
*/
cur_user_cur my_user_tab;
begin
open user_cur;
loop
/*从结果集中提取数据,每次提取两行*/
fetch user_cur bulk collect into cur_user_cur limit 2;
/*遍历集合cur_user_cur中的数据*/
for i in 1..cur_user_cur.count loop
dbms_output.put_line(cur_user_cur(i).user_id||'----'||cur_user_cur(i).name||'----'||cur_user_cur(i).age);
end loop;
exit when user_cur%notfound;
end loop;
close user_cur;
end;
declare
cursor user_cur
is select *
from my_user;
begin
for cdr in user_cur
loop
dbms_output.put_line(cdr.user_id||'----'||cdr.name||'----'||cdr.age);
end loop;
end;
/*cursor for loop 不需要特别的申明变量,它可以提取出行对象类型数据*/
declare
cursor user_cur
is select *
from my_user;
cdr my_user%rowtype;
begin
if user_cur%isopen then
fetch user_cur into cdr;
dbms_output.put_line(cdr.user_id||'----'||cdr.name||'----'||cdr.age);
else dbms_output.put_line('游标没有打开');
end if;
end;
declare
cursor user_cur
is select *
from my_user;
cdr my_user%rowtype;
begin
open user_cur;
if user_cur%isopen then
loop
fetch user_cur into cdr;
exit when user_cur%notfound;
dbms_output.put_line(cdr.user_id||'----'||cdr.name||'----'||cdr.age);
end loop;
else dbms_output.put_line('游标没有打开');
end if;
end;
declare
cursor user_cur
is select *
from my_user;
cdr my_user%rowtype;
begin
open user_cur;
loop
fetch user_cur into cdr;
if user_cur%found then
dbms_output.put_line(cdr.user_id||'----'||cdr.name||'----'||cdr.age);
else
dbms_output.put_line('游标没有打开');
exit;
end if;
end loop;
end;
declare
/*这里的取值写在declare和begin中都可以*/
v_user_id my_user.user_id%type:='&v_user_id';
/*这里的v_user_id的类型写number和my_user.user_id%type都可以*/
cursor c_my_user(v_user_id my_user.user_id%type)
is select *
from my_user
where user_id=v_user_id;
cdr my_user%rowtype;
begin
open c_my_user(v_user_id);
loop
fetch c_my_user into cdr;
if c_my_user%found then
dbms_output.put_line(cdr.user_id||'----'||cdr.name||'----'||cdr.age);
else
dbms_output.put_line('游标没有打开');
exit;
end if;
end loop;
end;
分享标题:oracle的显式游标
转载源于:
http://chengdu.cdxwcx.cn/article/ipjcso.html