2014-02-10 2 views
0

Я пытаюсь запустить следующий фрагмент кода, чтобы обновить сводку таблицы из данных в таблице click_summ.Обновить таблицу оракула с данными из другой таблицы в SAS

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; 

Данный фрагмент кода бросает ошибку говоря:

ERROR: The ORACLE table SUMMARY has been opened for OUTPUT. This table already exists, or there is a name conflict with an existing object. This table will not be replaced. This engine does not support the REPLACE option.

Что такое работа вокруг для того же самого? Этот вопрос связан с вопросом, который я задал ранее (Summerizing a table in SAS)

ответ

0
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; 

Modify был ключ. Это также отлично работает с таблицами Oracle. И довольно быстро.

0

Просто измените имя таблицы из сводки на что-то еще и попробуйте. Не уверен, можем ли мы использовать сводку как имя таблицы, так как там имеется сводка процессов. .not sure но попробуйте и посмотрите

+0

Настоящее имя не является сводкой. Но это не причина. Мое требование - обновить ту же таблицу, поэтому изменение имени таблицы также не решит мою проблему: \ –

0

Как говорится в сообщении об ошибке, вы не можете заменить таблицу оракула на этапе DATA. Обходным путем будет следующее:

1) Выполнять все манипуляции данными во временном наборе данных SAS;

2) Удалите все строки в исходной таблице Oracle, используя PROC SQL ... DELETE ...;

3) Добавьте новые данные (промежуточный набор данных), чтобы освободить таблицу Oracle, используя PROC APPEND.

+0

Это решение, с которым мне пришлось начинать. Но был напуган тем фактом, что происходит удаление, которое происходит, и что, если append не удалось? –

+0

Ну, вот для чего нужны резервные копии. В качестве альтернативы удалению вы можете попробовать UPDATE внутри PROC SQL. –

+0

Обновление с левым соединением не работает в PROC SQL. –

Смежные вопросы