2011-09-02 58 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