PL/SQL 中的游标可用来一次性获取一行和多行数据,存储在游标中的数据被称为活动数据集,有两种类型的游标:
1. 隐式游标:预定义游标
2. 显式游标:用户自定义游标
这里有 6 个简单的程序用来演示游标概念。
1. 隐式游标:用来演示使用 SQL%FOUND 属性的程序,该程序从包含两个字段 emp_sal 和 emp_no 的 emp 表中查找每个雇员的工资:DECLARE salary number(5); BEGIN SELECT emp_sal INTO salary FROM emp WHERE emp_no=&empno; IF SQL%FOUND THEN DBMS_OUTPUT.PUT_LINE(’Record Found’); DBMS_OUTPUT.PUT_LINE(’Salary = ‘ || salary); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(’Record Not Found’); END;2. 隐式游标:用来演示使用 SQL%NOTFOUND 属性的程序,该程序从包含两个字段 emp_sal 和 emp_no 的 emp 表中查找每个雇员的工资:
DECLARE salary number(5); BEGIN SELECT emp_sal INTO salary FROM emp WHERE emp_no=&empno; IF SQL%NOTFOUND THEN DBMS_OUTPUT.PUT_LINE(’Record Not Found’); ELSE DBMS_OUTPUT.PUT_LINE(’Record Found’); DBMS_OUTPUT.PUT_LINE(’Salary = ‘ || salary); END IF; END;
BEGIN UPDATE emp SET emp_sal = emp_sal +1000; DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT || ‘Records Updated’); END;4. 显式游标:显示指定部门的雇员信息,包括雇员号、姓名和工资
DECLARE CURSOR empdata IS SELECT emp_no, emp_name, emp_sal FROM emp WHERE emp_deptno = &deptno; ecode emp.emp_no%TYPE; ename emp.emp_name%TYPE; esal emp.emp_sal%TYPE; BEGIN OPEN empdata; LOOP FETCH empdata INTO ecode, ename, esal; EXIT WHEN empdata%NOTFOUND; DBMS_OUTPUT.PUT_LINE(ecode || ename || esal); END LOOP; CLOSE empdata; END;5. 演示 FOR LOOP 显式游标的使用,用来显示指定部门的雇员信息
DECLARE CURSOR empdata IS SELECT emp_no, emp_name, emp_sal FROM emp WHERE emp_deptno = &deptno; BEGIN FOR rec IN empdata LOOP DBMS_OUTPUT.PUT_LINE(rec.emp_no || rec.emp_name || rec.emp_sal); END LOOP; END;6. 演示显式游标的参数传递概念
DECLARE CURSOR empdata(n number) IS SELECT emp_no, emp_name, emp_sal FROM emp WHERE emp_deptno = n; ecode emp.emp_no%TYPE; ename emp.emp_name%TYPE; esal emp.emp_sal%TYPE; BEGIN OPEN empdata(n); LOOP FETCH empdata INTO ecode, ename, esal; EXIT WHEN empdata%NOTFOUND; DBMS_OUTPUT.PUT_LINE(ecode || ename || esal); END LOOP; CLOSE empdata; END;本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务