2017-07-24 39 views
2

我試着用以下的SAS代碼:SAS直通行受到影響

proc sql; 
connect to oracle as oracle(&user &pass &path); 
    execute(delete from t where x > 1) by oracle; 
disconnect from oracle; 
quit; 

,最終我需要打印日誌文件多少行刪除。

現在我已經發現了兩個宏變量SQLXRCSQLXMSG,但它們只表示相應的返回碼和錯誤信息。這是不夠的,以獲得所需的。

請指教。

感謝

+1

聽起來像是關於如何使用ORACLE而不是SAS的問題。 – Tom

+0

@Tom如果可以使用sql%rowcount,那可能是一個解決方案 – griboedov

+0

有沒有辦法將sql%rowcount的值作爲查詢的一部分返回?或者你需要創建一個存儲過程來運行刪除,保存計數,然後返回計數作爲查詢結果,以便SAS可以嘗試運行該過程作爲select而不是execute語句的一部分? – Tom

回答

1

您可以運行等效的查詢,並在執行前返回結果的刪除:

而且,不需要as oracle位,你可以使用as關鍵字在connect to語句分配別名,它默認

proc sql noprint; 
connect to oracle (&user &pass &path); 
    select c into :ct from connection to oracle (select count(*) as c from t where x > 1); 
    %PUT NOTE: There are &c rows in t where x > 1; 
    execute(delete from t where x > 1) by oracle; 
    %PUT NOTE: I deleted &c rows from t; 
disconnect from oracle; 
quit; 
  1. 是發動機(oracle)的名稱使用是因爲否則,select語句會將計數輸出到輸出窗口
  2. select ... from connection to語法允許將查詢的結果返回到SAS會話。
  3. 宏變量c用於存儲行數。
  4. %PUT語句用於將信息返回到日誌。

如果表在兩個語句的執行之間發生變化,那麼select語句可能不會返回刪除的行數的精確計數。