PL sql 里有两种游标,一种是普通的静态游标和sql 标准的游标一样,一种是动态游标sys_refcursor。静态游标必须在编译时确定查询语句,而动态游标可以在运行时才确定查询语句,而且可以修改对应的查询语句。

两种游标的定义如下,其中c是静态游标,rc 动态游标:

DECLARE
   CURSOR c
   IS
      SELECT employee_id FROM employee;

   rc    SYS_REFCURSOR;
   var   va;

   l_employee_id employees.employee_id%TYPE;
BEGIN
   OPEN c;
   FETCH c BULK COLLECT INTO var;
   CLOSE c;

   -- 静态游标结束,下面的是动态游标
   OPEN rc FOR SELECT COLUMN_VALUE FROM TABLE (var);
   LOOP
      FETCH
         rc
      INTO
         l_employee_id;
      EXIT
   WHEN rc%notfound;
      dbms_output.put_line(l_employee_id);
   END LOOP;
   CLOSE rc;
END;

上面的代码还演示了如何将一个静态游标的查询结果赋值给一个动态游标。两种游标的使用步骤都是open,loop,fetch,close。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据