2008-11-20 9 views
5

एक तालिका मौजूद है कि किसी और को लोड किया गया है। मुझे टेबल के खिलाफ पूछताछ करने की ज़रूरत है, लेकिन इंडेक्स की कमी क्वेरी योजना को कमजोर बनाती है। मैं क्या करना चाहता हूं यह पता लगाता है कि किसी विशेष कॉलम के लिए कोई अनुक्रमणिका है या नहीं, ताकि अगर मैं अस्तित्व में न हो, तो इसे बना सकता हूं, और यदि यह पहले से मौजूद है तो इसे नहीं बना सकता है।ओरेकल में किसी तालिका पर किसी विशिष्ट कॉलम के लिए कोई अनुक्रमणिका होने पर आप कैसे पता लगाते हैं?

धन्यवाद।

ईविल

उत्तर

7

आप DBA_/ALL_/USER_IND_COLUMNS क्वेरी कर सकता है, यानि कि

SQL> SELECT index_name 
    2 FROM dba_ind_columns 
    3 WHERE table_owner = 'SCOTT' 
    4  AND table_name = 'EMP' 
    5  AND column_name = 'EMPNO'; 

INDEX_NAME 
------------------------------ 
PK_EMP 
बेशक

, आप क्वेरी थोड़ा विस्तार करने के लिए कर सकते हैं। यह किसी भी इंडेक्स को उठाएगा जिसमें ईएमपीएनओ कॉलम दिखाई देता है। आप खुद को इंडेक्स तक सीमित करना चाहते हैं जहां कॉलम इंडेक्स का अग्रणी कॉलम है (COLUMN_POSITION = 1)। या आप खुद को उस विशेष कॉलम पर इंडेक्स तक सीमित करना चाहते हैं (ताकि COLUMN_POSITION 2 में कोई कॉलम न हो), यानी

SQL> ed 
Wrote file afiedt.buf 

    1 SELECT index_name 
    2 FROM dba_ind_columns a 
    3 WHERE table_owner = 'SCOTT' 
    4  AND table_name = 'EMP' 
    5  AND column_name = 'EMPNO' 
    6  AND column_position = 1 
    7  AND NOT EXISTS(SELECT 1 
    8      FROM dba_ind_columns b 
    9      WHERE a.index_owner = b.index_owner 
10      AND a.index_name = b.index_name 
11*      AND b.column_position = 2) 
SQL>/

INDEX_NAME 
------------------------------ 
PK_EMP 
1

SYS स्कीमा की क्वेरी से परिचित बनें:

Select * from sys.all_ind_columns where table_name=:TabName and table_owner=:TabOwner; 
संबंधित मुद्दे

 संबंधित मुद्दे