【Oracle】游标—2
显示游标属性 1、%FOUND 如果FETCH语句返回一行,则%FOUND为TRUE,否则为FALSE;如果在打开游标之前或者关闭游标之后使用该语句,返回ORA-1001错误;打开游标后,没有使用FETCH就使用该语句,返回NULL。 2、%NOTFOUND 与%FOUND相反。 3、%ISOPEN 判断游标是否打开。如果已经打开,返回TRUE,否则返回FALSE。 4、%ROWCOUNT 返回游标FETCH行数。如果在打开游标之前或者关闭游标之后使用该语句,返回ORA-1001错误;打开游标后,没有使用FETCH就使用该语句,返回NULL。 例、给工资低于1200 的员工增加工资50。 DECLARE v_empno emp.empno%TYPE; v_sal emp.sal%TYPE; CURSOR c IS SELECT empno, sal FROM emp; BEGIN OPEN c; LOOP FETCH c INTO v_empno, v_sal; EXIT WHEN C%NOTFOUND; IF v_sal<=1200 THEN UPDATE emp SET sal=sal+50 WHERE empno=v_empno; DBMS_OUTPUT.PUT_LINE(‘编码为’||v_empno||’工资已更新!’); END IF; DBMS_OUTPUT.PUT_LINE(‘记录数:’||C%ROWCOUNT); END LOOP; CLOSE c; END; 在处理游标时,一般使用LOOP、WHILE循环处理游标的所有数据。 显示游标的FOR循环 PL/SQL提供游标FOR循环语句,自动执行游标的OPEN、FETCH、CLOSE语句和循环语句的功能。当进入循环时,游标FOR循环语句自动打开游标,并提取第一行游标数据,当程序处理完提取的数据后,游标FOR循环语句自动提取下一行数据供程序处理,当提取完结果集中的所有数据行后结束循环,并自动关闭游标。格式: FOR index_variable IN cursor_name [value [, value]…] LOOP – 游标数据处理代码 END LOOP; 其中: index_variable为游标FOR循环语句隐含声明的索引变量,该变量为记录变量,其结构与游标查询语句返回的结构集合的结构相同。在程序中可以通过引用该索引记录变量素来读取所提取的游标数据,index_variable中各素的名称与游标查询语句选择列表中所制定的列名相同。如果在游标查询语句的选择列表中存在计算列,则必须为这些计算列指定别名后才能通过游标FOR 循环语句中的索引变量来访问这些列数据。 注:不要在程序中对游标进行人工操作;不要在程序中定义用于控制FOR循环的记录。 例、游标FOR循环 DECLARE CURSOR c_sal IS SELECT empno, ename FROM emp; BEGIN –隐含打开游标 FOR v_sal IN c_sal LOOP –隐含执行一个FETCH语句 DBMS_OUTPUT.PUT_LINE( to_char(v_sal.empno)||’—‘||v_sal.ename)) ; –隐含监测c_sal%NOTFOUND END LOOP; –隐含关闭游标 END; 例、游标FOR 循环语句为游标传递参数。 DECLARE CURSOR c1(dept_no NUMBER DEFAULT 10) IS SELECT dname, loc FROM dept WHERE deptno <= dept_no; BEGIN DBMS_OUTPUT.PUT_LINE(‘dept_no参数值为30:’); FOR c1_rec IN c1(30) LOOP DBMS_OUTPUT.PUT_LINE(c1_rec.dname||’—‘||c1_rec.loc); END LOOP; DBMS_OUTPUT.PUT_LINE(CHR(10)||’使用默认的dept_no参数值10:’); FOR c1_rec IN c1 LOOP DBMS_OUTPUT.PUT_LINE(c1_rec.dname||’—‘||c1_rec.loc); END LOOP; END; 欢迎指正……
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/41750.html