oracle学习笔记(第八章:游标)

游标Cursor (有带参数的游标和不带参数的游标) :
使用步骤:
1,定义游标 :
Cursor cur _name is select 语句;-- 不带参数
Cursor cur_name(v_var datatype default) is select 语句;-- 带参数语句
2,打开游标 :
Open cur_name; -- 不带参数
Open cur_name(value); -- 带参数语句,打开时必须给变量赋值,如果变量有默认值,可以不赋值
3,提取数据 :
Fetch cur_name into v_var;-- 常用在循环语句中
4,关闭游标 :
Close cur_name;

可以将游标放在 for 循环中,这样就不需要 打开,提取,关闭游标步骤
可以使用 %found , %notfound 得知游标是否检索到数据,使用 %rowcount 游标检索到多少行数据


如果要没有找到数据退出游标可以使用 exit when cur_name%notfound;
例子1(不带参数):
DECLARE
VEMP_NO EMP_M.EMP_NO%TYPE;
VEMP_NAME EMP_M.EMP_NAME%TYPE;
VEMP_SEX EMP_M.EMP_SEX%TYPE;
CURSOR CUR_TEST IS SELECT EMP_NO FROM EMPM;
BEGIN
OPEN CUR_TEST;
LOOP
FETCH CUR_TEST INTO VEMP_NO, VEMP_NAME, VEMP_SEX; --如果用Fetch语句提取光标中的行﹐那么into后面的参数必须与游标中select中的列数相同﹐且一一对应
DBMS_OUTPUT.PUT_LINE(VEMP_NO);
EXIT WHEN CUR_TEST%NOTFOUND;
END LOOP;
CLOSE CUR_TEST;
END;
例子2(带参数):
declare
cursor parm_cur(vemp_age number) is select emp_nm from empm where age>vemp_age;
vemp_name varchar2(10);
begin
open parm_cur(22);
loop
fetch parm_cur into vemp_name;
dbms_output.put_line(vemp_name);
exit when parm_cur%notfound;
end loop;
close parm_cur;
end;
例子3:
DECLARE
CURSOR cur_parm(v_Age INT) IS SELECT EMP_NM FROM EMPM WHERE age = v_Age;
BEGIN
FOR I IN cur_parm(22) LOOP
DBMS_OUTPUT.PUT_LINE(I.EMP_NM);
END LOOP; --循环结束后﹐不需要用close命令关闭光标
END;

游标变量:
使用cursor变量﹐可以动态的决定select语句
建立 cursor 变量﹕
1. 定义一个 REF CURSOR 型态.
2. 宣告 cursor 变量.
3. 开启 cursor 变数并与查询关连
declare
type empm_type is ref cursor return empm%rowtype;--确定了cursor查询结果返回的类型 (当然也可以不确定返回类型)
cur_type empm_type;
empm_rec empm%rowtype;
begin
open cur_type for select * from empm where emp_no = '001';--动态的决定select语句
loop
fetch cur_type into empm_rec;
exit when cur_type%notfound;
dbms_output.put_line('emp_no='||empm_rec.emp_no||','||'emp_name='||empm_rec.emp_nm);
end loop;
close cur_type;
dbms_output.put_line('-------------------------------------------------');
open cur_type for select * from empm;--动态的决定select语句
loop
fetch cur_type into empm_rec;
exit when cur_type%notfound;
dbms_output.put_line('emp_no='||empm_rec.emp_no||','||'emp_name='||empm_rec.emp_nm);
end loop;
close cur_type;
end;

游标与 update 语句 cursor for update,用来更新检索到的数据
DECLARE
CURSOR cur IS SELECT * FROM empm WHERE age <= 30 FOR UPDATE OF age;
BEGIN
FOR i IN cur LOOP
UPDATE empm SET age =22 WHERE CURRENT OF cur;
COMMIT;
END LOOP;
END ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值