Plsql 获取错误PLS-00435:绑定中没有批量的DML语句不能在FORALL中使用
我越来越 错误(68,3):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
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;
请参阅这些文章中的更多示例: