我创建了一个存储过程,在存储过程中创建一个游标,要通过游标中的数据来处理一些数据。
必须要用循环,但是循环中打开游标后,取出的数据永远是第一次放入游标中的1500条数据,例如循环执行三次,有4500条数据,是游标中1500条数据重复了三次。如何在我每循环一次,游标中就有新的数据。
游标中的数据如何清除。
我没有金币,不能悬赏,希望见谅,并且能帮我解决问题;
以下是我的过程
create or replace procedure ZHX_TEST is   START_DATE date;
   D_NUM NUMBER(5);
   EXNUM NUMBER := 0; --循环次数
   C_COUNT NUMBER := 0;
   V_ORDERID   inf_crm20_product_order.product_order_id%TYPE;
   ARCHIVE_DATE DATE;
   v_cust_id  inf_crm20_product_order.cust_order_id%TYPE;
   
   cursor WAIT_DELETE is  --创建一个游标,存放定单编码
   select icm.produce_no from zhx_inf_crm_mission icm where icm.state='10F'
   and icm.state_date<=ARCHIVE_DATE
   AND ROWNUM <= 1500;
   
BEGIN
       ARCHIVE_DATE:= trunc(sysdate-5,'dd');
       START_DATE := SYSDATE;
        D_NUM      := 0;
--循环次数
      select floor(count(*) / 1499) + 1 
               into EXNUM
       from zhx_inf_crm_mission icm where icm.state='10F';
         
            
      FOR C_COUNT IN 1 .. EXNUM LOOP
              OPEN WAIT_DELETE;  --打开游标
                   LOOP
                       FETCH WAIT_DELETE INTO V_ORDERID;
                       EXIT WHEN WAIT_DELETE%NOTFOUND;                          --inf_crm_mission临时表
                         insert into tmp_inf_crm_mission_archive
                         (produce_no) values(V_ORDERID);
                    END LOOP;
              close WAIT_DELETE;
              COMMIT;
      --inf_crm20_product_order临时表
   /*     insert into tmp_product_order_archive 
        (product_order_id,cust_order_id)
        select a.product_order_id,a.cust_order_id from inf_crm20_product_order_bak a
        where a.product_order_id=V_ORDERID;*/
        
      --inf_crm20_cust_order临时表
   /*     insert into tmp_cust_order_archive(cust_id,cust_order_id)
        select a.id,a.cust_order_id from inf_crm20_cust_order_bak a
        where exists(select 1 from inf_crm20_product_order_bak b where b.cust_order_id=a.cust_order_id and b.product_order_id=V_ORDERID);
      */
     /* dbms_output.put_line('WAIT_DELETE--完成循环第几次:' || C_COUNT);*/  
      END LOOP;
end ZHX_TEST;