2014-04-28 55 views
0

我有一個SAS本地表,我試圖在遠程DB2服務器上創建臨時表表。無論如何,除了在其他地方建立一個插入聲明並將其流式傳輸以外,還有其他的做法?從SAS表寫入DB2臨時表

libname temp db2 uid=blagh pwd=blagh dsn=blagh connection=global schema=Session; 

Proc SQL; 
    Connect to db2 (user=blagh pw=blagh dsn=blagh connection=global); 

    Execute (
    Declare Global Temporary Table Session.Test 
     (foo char(10)) 
     On Commit Preserve Rows 
     Not Logged 
    ) by db2; 

    Execute (Commit) by db2; 

    Insert Into Session.Test 
    Select Distinct A.foo From Work.fooSource A; 

我已經嘗試了幾個這些主題的變化,每個變化導致錯誤。上面的代碼產生。

ERROR: Column foo could not be found in the table/view identified with the correlation name A. 
ERROR: Unresolved reference to table/correlation name A. 

刪除別名給我。

ERROR: INSERT statement does not permit correlation with the table being inserted into. 
+0

難道是表或列名的情況下DB2中的敏感性? – vasja

回答

1

像下面的傳遞語句應該工作。

proc sql; 
    connect to db2 (user=blagh pw=blagh dsn=blagh connection=global); 
    execute (create view 
       sasdemo.tableA as 
       select VarA, 
        VarB, 
        VarC 
       from sasdemo.orders) 
    by db2; 
    execute 
    (grant select on 
     sasdemo.tableA to testuser) 
     by db2; 
    disconnect from db2; 
quit; 

下面的代碼是什麼,我經常使用上傳到DB2

rsubmit YourServer; 
libname temp db2 uid=blagh pwd=blagh dsn=blagh connection=global schema=Session; 

    data temp.Uploaded_table(bulkload = yes bl_method = cliload); 
     set work.SAS_Local_table; 
    run; 

endrsubmit; 
libname temp remote server=YourServer; 

更多選項DB2可從SAS支持... http://support.sas.com/documentation/onlinedoc/91pdf/sasdoc_913/access_dbspc_9420.pdf

1

我不知道DB2,所以我不知道肯定這工作做,但「正常」的方式來做到這一點是PROC COPY(雖然數據的步驟也應該工作)。我想你的代碼在上面,db2不允許插入那種方式(我認爲這是相當普遍的不支持SQL風格)。

libname temp db2 uid=blagh pwd=blagh dsn=blagh connection=global schema=Session; 

proc copy in=work out=temp; 
select work.foosource; 
run; 

如果您需要的名稱是不同的(在PROC COPY它不會),你可以做一個簡單的數據一步。

data temp.yourname; 
set work.foosource; 
run; 

您不應該需要在SQL中執行插入操作。如果你想首先在db2中聲明它(在connect to...會話中),你可能可以做到這一點,並且仍然可以執行這兩個選項中的任何一個(儘管這也是基於RDBMS而變化的,所以請測試一下)。