यह करने के लिए एक और तरीका है त्रुटि हैंडलिंग के साथ है:
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
नामक किसी अन्य ऑब्जेक्ट (जैसे एक चर) का अस्तित्व परीक्षण तोड़ देगा।
यह जारी हैडलर गुंजाइश के भीतर गायब कॉलम के लिए किसी भी अन्य त्रुटियों को मुखौटा करेगा, इसलिए केवल उस टेस्ट को सीमित करना सर्वोत्तम है जिसे आप करना चाहते हैं।
स्रोत
2014-06-30 07:16:07
उत्तर के लिए धन्यवाद, मैं एक विशिष्ट स्कीमा से तालिकाओं के खिलाफ जांचना चाहता हूं। मैंने आपके द्वारा सुझाई गई रेखा को जोड़ने का प्रयास किया लेकिन खोज कुछ भी नहीं लौटा (मैंने इसे एक कॉलम का नाम दिया जो मुझे पता है)। क्या आप मुझे थोड़ा और बता सकते हैं कि क्वेरी कैसे काम करती है? धन्यवाद –
क्षमा करें टाइपो: खोज है * अनुरोध –
आपको क्या गड़बड़ हो सकती है कि आप कहां से क्लॉज के 'TBNAME' भाग में स्कीमा नहीं जोड़ते हैं। कहें, उदाहरण के लिए, आप 'UPDATE_TIMESTAMP' नामक कॉलम की तलाश में हैं जो 'SCH.TAB1' या 'SCH.TAB2' में हो सकता है, और आपको लगता है कि यह' SCH.TAB3' (लेकिन यह नहीं है) में हो सकता है। आपकी क्वेरी 'चयन STRIP (TBCREATOR) || होगी '।' || (जिन्हें TBNAME) SYSIBM.SYSCOLUMNS से जहां नाम = 'UPDATE_TIMESTAMP' और TBNAME में ('tab1', 'tab2', 'Tab3') और TBCREATOR = 'SCH'' – bhamby