Sql 使用SAS中另一个表的数据更新oracle表
我正在尝试运行以下代码,从click_summ table中的数据更新表摘要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
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表。你能评论一下吗?