存储过程DIY2----游标与循环

来源:互联网 发布:js获取当前div的id 编辑:程序博客网 时间:2024/04/30 21:32

游标参与循环的三种情况:
(1)declare cursor-->open cursor-->loop--->fetch curosr into -->end loop-->close cursor
     这种情况每次调用fetch后游标将移动到下一条记录,但是我们要自己构造循环
     declare
     v_name tdz.vxm%TYPE;--%TYPE可以直接用取出字段的类型
     v_class tdz.vbj%TYPE;
     v_classes tdz.vbj%TYPE;
     cursor mycoursor IS
     SELECT vxm.vbj FROM tdz WHERE vbj=v_classes;
     BEGIN
     v_classes:='tang';

---------------------------
     open mycoursor;

------------------------
     loop
     fetch mycursor into v_name,v_class
     exit when mycursor%NOTFOUND;
     end loop;

---------------------------------
     close mycursor;

--------------------------------
     end;
    
(2)CURSOR FOR Loop
     FOR  employee_rec in c1  ---employee_rec直接用,不用提前定义
     LOOP
     total_val := total_val + employee_rec.monthly_income;
     END LOOP;
     当使用CURSOR FOR Loop时,不用我手工open cursor close cursor,
 (3)将dulk collect 批处理加入cursor,fetch语句一次只从结果集中提取出一行,而每次fetch后游标才会
    指向结果集的下一行。
     //先要定义表,因为游标批处理将返回多条记录,我们把     它存在表中,标的类型与字段的类型一样。
    TYPE Tab_sal IS TABLE OF emp.salary&%TYPE;

     TYPE Tab_id IS TABLE OF emp.id%TYPE//emp.id(表名.字段名)
     TYPE Tab_name IS TABLE OF emp.name%TYPE;
     eid Tab_id ;  / /定义好了表后就可以用它来定义变量来存储有标中的相应字段
     ename Tab_name;
      sales  Tab_sal;
      cursor my_curl is
       select emp_id,emp_name,salary from emp where ROWNUM<=3;(ROWNUM为伪列,表示当前行)
        BEGIN

-----------------------------------------------------------------------------
        OPEN my_curl;
        FETCH my_curl BULK COLLECT INTO eid,ename,sal;

----------------------------------------------------------------------------------
        for IN    1..eid.COUNT    loop   --i可以直接用
        DBMS_OUTPUT.PUT_LINE(ename(i));--用了批处理后,可以像用数组一样
        end loop;

---------------------------------------------------------------
        close my_curl;

------------------------------------------------------
        end;
       (可能不设ROWCOUNT之前my_curl将返回更多的纪录,但是可以用ROWCOUNT来限制)
       另外,还可以用LIMIT在FETCH语句中限制。
        FETCH my_curl BULK COLLECT INTO eid,ename,sal limit 3 (也可以限制在游标记录中只取一定数量的记录数)

原创粉丝点击