Sql 使用SAS中另一个表的数据更新oracle表

Sql 使用SAS中另一个表的数据更新oracle表,sql,sas,Sql,Sas,我正在尝试运行以下代码,从click_summ table中的数据更新表摘要 data temp(index=(comp=(card_number package_sk))); set click_summ(where=(^missing(e_1st_click_dt))); keep card_number package_sk e_1st_click_dt; run; data summary(drop=new_date) ; set summary; set temp(rename=(e

我正在尝试运行以下代码,从click_summ table中的数据更新表摘要

data temp(index=(comp=(card_number package_sk)));
set click_summ(where=(^missing(e_1st_click_dt)));
keep card_number package_sk e_1st_click_dt;
run;

data summary(drop=new_date) ;
set summary;
set temp(rename=(e_1st_click_dt= new_date) in=a) key=comp;
if a then do;
   e_1st_click_dt = min(e_1st_click_dt,new_date);
end;
else
   _ERROR_ = 0; /*No need for IORC errors*/
run;
这段特定的代码抛出一个错误,表示:

错误:已打开ORACLE表摘要以进行输出。此表已存在,或存在名称冲突 使用现有对象。这张桌子不会被替换。此发动机不支持更换选项


同样的工作是什么?这个问题与我之前提出的一个问题有关()

请将表名从summary更改为其他名称,然后重试..我不确定是否可以使用summary作为表名,因为存在proc summary…不确定,但请尝试查看

,因为错误消息说,无法在数据步骤中替换oracle表。解决办法是:

1) 在临时SAS数据集中执行所有数据操作

2) 使用PROC SQL删除原始Oracle表中的所有行。。。删除

3) 使用PROC APPEND将新数据(临时数据集)添加到空Oracle表中

data temp;
set click_summ(where=(^missing(e_1st_click_dt)));
keep card_number package_sk e_1st_click_dt;
run;

data summary(drop=new_date) ;
modify summary temp(rename=(e_1st_click_dt= new_date) in=a);
by card_number, package_sk;
if a then do;
   e_1st_click_dt = min(e_1st_click_dt,new_date);
end;
else
   _ERROR_ = 0; /*No need for IORC errors*/
run;

修改是关键。这也适用于Oracle表。而且速度也相当快。

实际名称不是摘要。但这不是原因。我的要求是更新同一个表,因此更改表名也不能解决我的问题:\n这是我必须首先使用的解决方案。但是被正在发生的删除和如果追加失败怎么办的事实吓坏了?!这就是备份的目的。作为删除的替代方法,您可以尝试在PROC SQL内部更新。是的,没错。但我假设您仍然需要在更新之前在临时数据集中进行合并。只有在这之后,才能使用准备好的数据更新oracle表。你能评论一下吗?