2012-01-05 16 views
6

मैं एक डीबी 2 डेटाबेस का उपयोग कर रहा हूँ। तालिका में या तालिका की सूची में कोई कॉलम मौजूद है या नहीं, यह जानने के लिए उपयुक्त SQL क्वेरी क्या होगी?डीबी 2: तालिका में या कॉलम की सूची में कोई कॉलम मौजूद है या नहीं, तो मुझे कैसे पता चलेगा?

, उदा,

if "column_name" is found in "table name" or [list of table names] 

return true or the name of tables that have that column. 

बहुत धन्यवाद।

उत्तर

8

डीबी 2 z/OS 9.1 और LUW 9.7 पर परीक्षण किया गया:

SELECT STRIP(TBCREATOR) || '.' || STRIP(TBNAME) 
FROM SYSIBM.SYSCOLUMNS 
WHERE NAME = 'your_col' 
    AND TBNAME IN ('list', 'of', 'tables') 

आप केवल एक विशिष्ट स्कीमा से परिणाम चाहते हैं आप के अंत तक AND TBCREATOR = 'your_schema' जोड़ सकते हैं क्वेरी।

+0

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

+0

क्षमा करें टाइपो: खोज है * अनुरोध –

+0

आपको क्या गड़बड़ हो सकती है कि आप कहां से क्लॉज के 'TBNAME' भाग में स्कीमा नहीं जोड़ते हैं। कहें, उदाहरण के लिए, आप 'UPDATE_TIMESTAMP' नामक कॉलम की तलाश में हैं जो 'SCH.TAB1' या 'SCH.TAB2' में हो सकता है, और आपको लगता है कि यह' SCH.TAB3' (लेकिन यह नहीं है) में हो सकता है। आपकी क्वेरी 'चयन STRIP (TBCREATOR) || होगी '।' || (जिन्हें TBNAME) SYSIBM.SYSCOLUMNS से जहां नाम = 'UPDATE_TIMESTAMP' और TBNAME में ('tab1', 'tab2', 'Tab3') और TBCREATOR = 'SCH'' – bhamby

0

यह करने के लिए एक और तरीका है त्रुटि हैंडलिंग के साथ है:

declare v_sql varchar(1000); 
declare col_missing integer default 0; 
declare col_does_not_exist condition for sqlstate '42703'; 
declare continue handler for col_does_not_exist set col_missing = 1; 

set v_sql = 'select table.foo from table'; 
execute immediate v_sql; 

if col_missing = 1 then 
    --Do something if column foo doesn't exist. 
end if; 

इस विधि सत्र तालिकाओं पर काम करेंगे, और आप भी एक वस्तु पर उपयोग कर सकते हैं, भले ही आप नहीं जानते कि क्या यह एक मेज है , देखें, उपनाम, आदि

कॉलम नाम की बजाय table.foo निर्दिष्ट करना महत्वपूर्ण है, अन्यथा foo नामक किसी अन्य ऑब्जेक्ट (जैसे एक चर) का अस्तित्व परीक्षण तोड़ देगा।

यह जारी हैडलर गुंजाइश के भीतर गायब कॉलम के लिए किसी भी अन्य त्रुटियों को मुखौटा करेगा, इसलिए केवल उस टेस्ट को सीमित करना सर्वोत्तम है जिसे आप करना चाहते हैं।

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

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