2011-09-02 59 views
1

我試圖自動執行一個涉及大量數據通過網絡傳遞的作業,以及實際的db2服務器和我們的SAS服務器之間。我想要做的是採取傳統的穿過......SAS - > Shell DB2 Passthrough和宏解析

proc sql; 
connect to db2(...); 
create table temp as 
select * from connection to db2(
    select 
    date 
    ....... 
    where 
    date between &start. and &stop. 
); disconnect from db2; 
quit; 

弄成這個樣子:

x "db2 'insert into temp select date ...... where date between &start. and &stop.'"; 

我遇到的幾個問題,第一是DB2日期'ddMONyyyy'd格式,這會導致shell命令提前終止。如果我能解決,我認爲它應該工作。

我可以將一個宏變量傳遞給AIX(SAS)服務器,而不需要執行db2命令所需的額外「集合」。

有什麼想法?

回答

2

通過用括號設置WHERE子句,可以解決日期問題中的單引號問題。我不確定這會起作用,但它可能值得嘗試。

至於X命令,你可以試試下面的:

%let start = '01jan2011'd; 
%let stop = '31dec2011'd; 

%let command_text = db2 %nrbquote(')insert into temp select date ... where (date between &start. and &stop.)%nrbquote('); 
%put command_text = &command_text; 
x "&command_text"; 
+0

對於單引號直通SQL,我用%BQUOTE。例如%LET DT = 2011-09-05; %LET SQLDT =%BQUOTE(」 &DT') ; –

+0

謝謝 這兩個選項讓做一次通過,這將節省大量的時間一噸現在只有SAS沒有把警告有關的字符串超過262個字符 – DataParadigms

+0

@ProcRun! - 嘗試noquotelenmax選項來取消警告。http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002233891.htm – fscmj