Plsql 获取错误PLS-00435:绑定中没有批量的DML语句不能在FORALL中使用

Plsql 获取错误PLS-00435:绑定中没有批量的DML语句不能在FORALL中使用,plsql,Plsql,我越来越 错误(68,3):PLS-00435:绑定中没有批量的DML语句不能在FORALL内部使用 请帮我解决这个问题 我的密码是:- create or replace PACKAGE BODY FIBRE_TOOLS AS g_package_name varchar2(30):='FIBRE_TOOLS'; g_proc_name varchar2(30); 。。 .. .. procedure prc_purge(p_nb_month IN num

我越来越

错误(68,3):PLS-00435:绑定中没有批量的DML语句不能在FORALL内部使用

请帮我解决这个问题

我的密码是:-

create or replace  PACKAGE BODY    FIBRE_TOOLS AS

g_package_name varchar2(30):='FIBRE_TOOLS';
g_proc_name varchar2(30);   
。。 .. ..

   procedure prc_purge(p_nb_month IN number default 210) is
   reqSelec VARCHAR2(4000);
   reqDELDES VARCHAR2(4000);
   reqDELINS VARCHAR2(4000);

   TYPE Curseur IS REF CURSOR;
   c_desinscription Curseur;

TYPE selREC IS RECORD (

  EMAIL     desinscription.EMAIL%type,
  IDRA      desinscription.IDRA%type,
  D_DATE    desinscription.desinscription_date%type
  );

   TYPE selTABLE IS TABLE OF selREC;
   ListeFIB selTABLE;

 BEGIN  
    reqSelec :='select EMAIL,IDRA,desinscription_date from desinscription where desinscription_date < trunc(add_months(sysdate,-'||p_nb_month||'))';

    reqDELDES := 'DELETE FROM DESINSCRIPTION WHERE EMAIL=:1 AND IRDA=:2';

    reqDELINS := 'DELETE FROM INSCRIPTION WHERE EMAIL=:1 AND IDRA=:2 AND INSCRIPTION_DATE < TRUNC(:3)';
    prc_log('Begining of purging procedure');
    open c_desinscription for reqSelec;
    LOOP
    fetch c_desinscription bulk collect into ListeFIB LIMIT 10000;
    EXIT WHEN ListeFIB.count = 0;
    FORALL i in ListeFIB.first.. ListeFIB.last
        EXECUTE IMMEDIATE reqDELDES USING  ListeFIB.EMAIL,ListeFIB.IRDA;
        EXECUTE IMMEDIATE reqDELINS USING ListeFIB.EMAIL,ListeFIB.IDRA,ListeFIB.D_DATE;
        COMMIT;
        EXIT WHEN c_desinscription%NOTFOUND;
    END LOOP;
    close c_desinscription;
    COMMIT;
    prc_log('Ending of purging procedure');
end prc_purge;
end FIBRE_TOOLS;
程序prc\U清除(p\U nb\U月,数字默认为210)为
reqSelec VARCHAR2(4000);
瓦查尔需求量2(4000);
reqDELINS VARCHAR2(4000);
Curseur类型为REF CURSOR;
c_设计说明游标;
类型selREC是记录(
电子邮件设计说明。电子邮件%类型,
IDRA设计说明。IDRA%类型,
日期设计说明。设计说明日期%类型
);
类型selTABLE是selREC的表格;
可选择列表;
开始
reqSelec:=“从Denscription中选择电子邮件、IDRA、Denscription_日期,其中Denscription_日期
我正试图根据根据标准(即nb_月)选择的两列从两个表中删除数据


我认为问题在于表类型和记录类型。我不知道该怎么做。根据我的知识记录类型应与FORALL一起使用。请在这方面帮助我,因为这非常关键。

您使用的DML语句带有FORALL,但不绑定所使用的集合-

将execute immediates替换为绑定集合,应该可以工作

EXECUTE IMMEDIATE reqDELDES USING  ListeFIB(i).EMAIL,ListeFIB(i).IRDA;
EXECUTE IMMEDIATE reqDELINS USING ListeFIB(i).EMAIL,ListeFIB(i).IDRA,ListeFIB(i).D_DATE;
请参阅这些文章中的更多示例:


不确定为什么要使用“立即执行”而不是“标准删除”?无论如何尝试使用下标<代码>使用ListFib(i).电子邮件、ListFib(i).IRDA等等都非常有用。。。这有帮助。要求是使用executeimmediate语句。