我创建了一个存储过程,在存储过程中创建一个游标,要通过游标中的数据来处理一些数据。
必须要用循环,但是循环中打开游标后,取出的数据永远是第一次放入游标中的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;
且 V_ORDERID inf_crm20_product_order.product_order_id%TYPE; 应该是V_ORDERID WAIT_DELETE%rowtype;
AND ROWNUM <= 1500;