oracle游标循环内给变量赋值_oracle动态游标for循环

oracle游标循环内给变量赋值_oracle动态游标for循环Oracle入门(十四.12)之游标FOR循环一、游标FOR循环游标FOR循环处理显式游标中的行。 这是一个快捷方式,因为游标被打开,循环中的每次迭代都会一次行,当处理最后一行时会退出循环,并且游标会自动关闭。 当最后一行被提取时,循环本身在迭代结束时自动终止

Oracle入门(十四.12)之游标FOR循环   一、游标FOR循环   游标FOR循环处理显式游标中的行。 这是一个快捷方式,因为游标被打开,循环中的每次迭代都会一次行,当处理最后一行时会退出循环,并且游标会自动关闭。 当最后一行被提取时,循环本身在迭代结束时自动终止。   (1)语法   FOR record_name IN cursor_name LOOP   statement1;   statement2;   . . .   END LOOP;   在语法中:   •record_name是隐式声明的记录的名称(作为cursor_name%ROWTYPE)   •cursor_name是先前声明的游标的PL / SQL标识符   注意:v_emp_record是隐式声明的记录。   (2)隐式记录访问   可以使用此隐式记录访问的数据, 通过使用INTO子句,没有声明变量来保存的数据。 该代码没有OPEN和CLOSE语句分别打开和关闭游标。   DECLARE   CURSOR emp_cursor IS   SELECT employee_id, last_name FROM employees   WHERE department_id = 50;   BEGIN   FOR v_emp_record IN emp_cursor   LOOP   DBMS_OUTPUT.PUT_LINE(v_emp_record.employee_id   || ‘ ‘ ||v_emp_record.last_name);   END LOOP;   END;   (3)游标FOR循环比较   将游标FOR循环代码与您在前一文中学到的展开代码进行比较。 这两种形式的代码在逻辑上彼此相同,并产生完全相同的结果。   DECLARE   CURSOR emp_cursor IS   SELECT employee_id, last_name   FROM employees   WHERE department_id = 50;   BEGIN   FOR v_emp_record IN emp_cursor   LOOP   DBMS_OUTPUT.PUT_LINE(…);   END LOOP;   END;   DECLARE   CURSOR emp_cursor IS   SELECT employee_id, last_name   FROM employees   WHERE department_id = 50;   v_emp_record emp_cursor%ROWTYPE;   BEGIN   OPEN emp_cursor;   LOOP   FETCH emp_cursor INTO   v_emp_record;   EXIT WHEN emp_cursor%NOTFOUND;   DBMS_OUTPUT.PUT_LINE(…);   END LOOP;   CLOSE emp_cursor;   END;   (4)游标FOR循环:第二个例子   已将v_dept_record隐式声明为dept_cursor%ROWTYPE。 它包含多少个字段?   DECLARE   CURSOR dept_cursor IS   SELECT department_id, department_name   FROM departments   ORDER BY department_id;   BEGIN   FOR v_dept_record IN dept_cursor   LOOP   DBMS_OUTPUT.PUT_LINE( v_dept_record.department_id   || ‘ ‘ ||v_dept_record.department_name);   END LOOP;   END;   二、循环游标准则   (1)指南   •不要声明控制循环的记录,因为它是隐式声明的。   •隐式记录的范围仅限于循环,因此无法在循环外引用记录。   •您可以通过record_name.column_name访问的数据。   (2)测试游标属性   您仍然可以测试游标属性,例如%ROWCOUNT。 在取出并处理了五行后,此示例从循环中退出。 光标自动关闭。   DECLARE   CURSOR emp_cursor IS   SELECT employee_id, last_name FROM employees;   BEGIN   FOR v_emp_record IN emp_cursor   LOOP   EXIT WHEN emp_cursor%ROWCOUNT > 5;   DBMS_OUTPUT.PUT_LINE( v_emp_record.employee_id   || ‘ ‘ ||v_emp_record.last_name);   END LOOP;   END;   (3)游标FOR循环使用子查询   你可以更进一步。 你根本不需要声明游标! 相反,您可以直接在FOR循环中指定光标所基于的SELECT。 这样做的好处是所有的游标定义都包含在一个FOR …语句中。 这使代码的后续更改变得更加容易和快速。   例子   FOR语句中的SELECT子句在技术上是一个子查询,因此您必须将其放在括号中。   BEGIN   FOR v_emp_record IN (SELECT employee_id, last_name   FROM employees WHERE department_id =50)   LOOP   DBMS_OUTPUT.PUT_LINE(v_emp_record.employee_id   ||’ ‘||v_emp_record.last_name);   END LOOP;   END;   再次,比较这两种形式的代码。 它们在逻辑上是相同的。 但是你宁愿写哪一个?   BEGIN   FOR v_dept_rec IN (SELECT *   FROM departments)   LOOP   DBMS_OUTPUT.PUT_LINE(…);   END LOOP;   END;   DECLARE   CURSOR dept_cursor IS   SELECT * FROM departments;   v_dept_rec   dept_cursor%ROWTYPE;   BEGIN   OPEN dept_cursor;   LOOP   FETCH dept_cursor INTO   v_dept_rec;   EXIT WHEN   dept_cursor%NOTFOUND;   DBMS_OUTPUT.PUT_LINE(…);   END LOOP;   CLOSE dept_cursor;   ————————————————   版权声明:本文为CSDN博主「茅坤宝骏氹」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。   原文链接:https://blog.csdn.net/moakun/article/details/

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/60691.html

(0)
上一篇 2024年 8月 29日
下一篇 2024年 8月 29日

相关推荐

关注微信