whymath 发表于 2021-11-28 14:00
请检查是否使用了异步的删除和访问操作,即执行删除的是一个进程,执行访问的是另一个进程?
如果必须这样 ...
不存在异步的问题,执行的代码就是下面这两段,删除原表中的重复记录,然后append新记录
proc sql;
delete from &inSet.
where varietyid in (select distinct varietyid from &addSet.);
proc append base=&inSet. data=&addSet. force;run;
当inset表很大时,就会触发这个锁对“”不可用 的错误
关于这个open,我写了下面这个宏,但open正确,表还是被锁住,也不知道哪里出问题
理论上open能够操作,执行append应该就没有问题了
%macro DataSetLock(ds=,sleepSecond=3,tryNumLmt=10);
*open返回正确,但表还是会锁定报错;
data _null_;
dsid = 0;
tryNum=0;
do until (dsid gt 0 or tryNum>&tryNumLmt.);
dsid = open("&ds.");
if (dsid eq 0) then do;
rc = sleep(&sleepSecond.);
end;
tryNum=tryNum+1;
end;
if (dsid gt 0) then do;
put dsid tryNum;
rc = close(dsid);
end;
run;
%mend;
麻烦帮忙看看,能不能找到解决方案,真是头大,耽搁2个星期了