2011-08-10 45 views
1

我使用SAS proc sql execute語句在Oracle服務器上運行sql和訪問表。爲了讓腳本自動運行,我通常在創建它們之前刪除表格或指令。有時候,當drop sql代碼運行時,表或索引不存在。 SAS會記錄一條關於刪除不存在的內容的錯誤消息。但是由於SAS代碼在丟棄後會繼續,所以這種錯誤信息根本就沒有關係。我想壓制這些錯誤信息,停止SAS記錄它們,因爲我不關心它們。我怎麼能在proc sql中做到這一點?如何從SAS proc中刪除錯誤消息sql執行語句

感謝您的任何幫助。

+0

您使用SQL passthrough或SAS libnames來訪問您的表嗎?如果你使用libnames,你可以使用proc數據集來刪除索引嗎? –

+0

我正在使用SQL passthrough。不確定如何從SAS PROC中刪除索引。對我而言,索引是一個純粹的數據庫事物,SAS甚至可能不知道數據庫索引的存在。糾正我,如果我錯了。 – Steve

+0

我發現如果你使用SQL passthrough來刪除一個表,那麼屬於這個表的所有指令都將被放在一起。所以在我的工作中沒有必要放棄索引。我總是可以丟表。從這一點來說,cmjohns的想法對我有用。謝謝。 – Steve

回答

2

我不知道一個選項,以剿這種單一類型的錯誤。雖然有幾個選項。

最好的辦法是清理代碼,以便您檢查,看看如果數據集存在試圖採取行動之前:

%if %sysfunc(exist(&name_of_data_set)) %then %do;

你也可以在這些步驟中重定向所有的日誌,你通過proc printto獲取您不想要的郵件,但您可能會丟失有價值的信息。

+0

使用SAS函數檢查表的存在的想法很有用。謝謝。但是它在索引方面是無奈的,因爲它是一個數據庫事物。當我嘗試刪除不存在的索引時,我仍會收到錯誤。 – Steve

+0

我想我不需要抑制任何特定的錯誤消息。我可以放在一個單一的proc SQL,它會工作,如果我可以讓這個過程SQL壓制任何數據庫執行錯誤消息。此外,我將編寫代碼爲proc sql;通過oracle_connection執行();放棄;如果從execute(...)返回的任何數據庫端錯誤消息在返回到SAS時被抑制,將會很有幫助。謝謝。 – Steve