%NotFound : 最后一条记录是否提取出 True or False。 %ISOpen : 游标是否打开True or False。 %RowCount :游标当前提取的行数 。 ②使用游标的属性。 例子:/* conn scott/tiger */ Begin Update emp Set If SQL%Found SAL = SAL + 0.1 Then Where JOB = 'CLERK';
DBMS_OUTPUT.PUT_LINE('已经更新!'); Else DBMS_OUTPUT.PUT_LINE('更新失败!'); End End; 6,如何使用显示游标,?如何遍历循环游标? ①使用显示游标 ⑴声明游标:划分存储区域,注意此时并没有执行Select 语句。 CURSOR 游标名( 参数 列表) 不是第一条记录。 Open 游标名( 参数 列表); ⑶获取记录:移动游标取一条记录 Fetch Close 游标名 InTo 游标名; 临时记录或属性类型变量; ⑷关闭游标:将游标放入缓冲池中,没有完全释放资源。可重新打开。 ②遍历循环游标 ⑴For 循环游标 循环游标隐式打开游标,自动滚动获取一条记录,并自动创建临时记录类型变量存储记录。 处理完后自动关闭游标。 For 变量名 Loop End Loop; ⑵Loop循环游标 。。。 Loop Fatch Exit End 。。。 例子1: /* conn scott/tiger */ Declare Cursor myCur is select empno,ename,sal from emp; 游标名 InTo When Loop; 临时记录或属性类型变量; 游标名%NotFound; In 游标名 [返回值类型] IS Select 语句; ⑵打开游标:执行Select 语句,获得结果集存储到游标中,此时游标指向结果集头, 而 If;
数据处理语句;
vna varchar2(10); vno number(4); vsal number(7,2); Begin open myCur; fetch myCur into vno,vna,vsal; dbms_output.put_line(vno||' close myCur; End; / 例子2:使用loop遍历游标。 /* conn scott/tiger */ Declare Cursor myCur is select ename,job,sal,empno from emp; varE myCur%rowType; Begin if myCur%isopen = false then open myCur; dbms_output.put_line('Opening...'); end if; loop fetch myCur into varE; exit when myCur%notfound; dbms_ou