2017-07-25 44 views
0

我正在使用SAS企業指南(EG)6.1,並且想知道我們的Oracle表的索引是什麼。有沒有辦法編寫一個程序來獲取這些信息?SAS企業指南:如何獲得Oracle表索引

我試圖做的:

LIBNAME DW ORACLE USER='username' PASSWORD='password' PATH='path.world' SCHEMA='schema'; 

DATA _NULL_ ; 
dsid = OPEN(DW.some_table) ; 
isIndexed = ATTRN(dsid,"ISINDEX") ; 
PUT isIndexed = ; 
RUN ; 

some_table是(我的表)的名字,但我得到一個錯誤:

ERROR: DATA STEP Component Object failure. Aborted during the COMPILATION phase. 
ERROR 557-185: Variable some_table is not an object. 

參考:https://communities.sas.com/t5/ODS-and-Base-Reporting/check-if-index-exists/td-p/1966

+0

您需要向Oracle詢問定義了哪些索引,而不是SAS。 https://stackoverflow.com/questions/640390/how-to-check-for-an-index-in-oracle – Tom

+0

我希望這個信息在'asashelp.vindex'視圖或相關視圖。 _如果不是,嘗試訪問Oracle的系統視圖。您可能需要更多的訪問權限才能執行此操作。 –

+0

@Dirk Horsten我認爲我在Oracle中沒有足夠的訪問權限。 – George

回答

1

OPEN需要一個字符串或者解析爲字符串的值。因此,你需要

dsid= OPEN('dw.some_dataset'); 

我不知道你是否可以使用與Oracle或沒有,我不知道是否ATTRN將這個特定的目的或沒有用處。這些與SAS數據集一起工作良好,但是它取決於libname引擎(以及它使用的任何中間件)來實現ATTRN將使用的功能。

例如,我沒有使用Oracle,但是我確實有帶有索引的SQL Server表,並且我可以在其上運行上面的代碼;代碼似乎可以正常工作(它不會顯示錯誤),但它顯示的表格顯示爲未索引。

您的最好賭注是使用傳遞(CONNECT TO ...)而不是libname進行連接,然後您可以運行本機Oracle語法,而不是使用SAS。