2017-04-06 23 views
1

使用顯式 SQL傳遞,臨時SQL表可以在PROC SQL語句之間保留嗎?可以在PROC SQL語句+ RSUBMIT之間保留SAS Explict Pass-Through Temp表?

我正在使用我的SAS 9.3連接到SAS服務器;所以也有RSUBMIT s。下面的代碼是發生了什麼的簡單例子。

使用此代碼創建臨時表,但看起來好像在ENDRSUBMIT之後,連接在不久的將來終止 - 但是有時候,如果我直接運行它,這個代碼很好,但如果我等待〜 10分鐘後執行後面的部分,臨時表不見了。

工作表非常大,轉換速度快得多,但仍需要時間。任何方式使臨時表在數據庫端更持久一點?

/* EXAMPLE */ 
/* upload list to db*/ 
RSUBMIT; 
PROC SQL; 
connect to odbc as db (dsn=blahdb uid=&id pwd=&pass connection=global); 
execute(load table #mylist (NUMLIST '\n') using client file 'mylist' escapes off quotes off delimited by ',') by db; 
QUIT;RUN; 
ENDRSUBMIT; 

/* Join with database tables */ 
RSUBMIT; 
PROC SQL; 
connect to odbc as db (dsn=blahdb uid=&id pwd=&pass connection=global); 

execute(select * 
    into #mylist2 
    from #mylist A 
    JOIN DBTABLE B on A.VAR = B.VAR 
) by db; 

QUIT; RUN; 
ENDRSUBMIT; 

/* download join into SAS*/ 
RSUBMIT; 
PROC SQL; 
connect to odbc as db (dsn=blahdb uid=&id pwd=&pass connection=global); 

create table akwork.sastab as select * from connection to db (select * from #mlist2); 

QUIT;RUN; 
ENDRSUBMIT; 

全局臨時表需要db管理權限,正確嗎?我沒有那個。 謝謝!

回答

0

這一般適用於的Sybase: 如果你在你的SQL語句的末尾添加一個分號,那麼臨時表將通過活動會話持久性。

我測試過這對SAS的SQL直通和它不同的rsubmit陳述小時工作分開。

因此,改用此:

execute(select * 
    into #mylist2 
    from #mylist A 
    JOIN DBTABLE B on A.VAR = B.VAR; 
) by db; 
1

您可能需要使用LIBNAME命令建立可在獨立PROC SQL會話之間保持連接。如果沒有創建libref,那麼SAS和可以保持活動狀態的數據庫之間沒有連接。

至少它是如何與SAS /訪問Teradata一起工作的。

libname tdwork teradata server=blahdb user=&id password=&pass connection=global; 
... 
proc sql; 
    connect to teradata as db (server=blahdb user=&id password=&pass connection=global); 
    ... 
quit; 
... 
proc sql; 
    connect to teradata as db (server=blahdb user=&id password=&pass connection=global); 
    ... 
quit; 
0

在SQL Server中,你可以先臨時表與雙散列(##),以允許其跨連接持續(只要它們是由同一個用戶)。可以肯定的,雖然之後自己收拾..