Oracle डाटाबेस में IF EXISTS
. शामिल नहीं है खंड जो कुछ अन्य DBMS अपने DROP TABLE
. में पेश करते हैं बयान। इसलिए, यदि हम किसी गैर-मौजूद तालिका को छोड़ने के प्रयास के परिणामस्वरूप होने वाली किसी भी ग़लत त्रुटि से बचना चाहते हैं, तो हमें थोड़ा अतिरिक्त काम करने की आवश्यकता है।
विकल्प 1:जांचें कि क्या तालिका मौजूद है
हम DBA_TABLES
की जांच कर सकते हैं तालिका मौजूद है या नहीं यह देखने के लिए डेटा डिक्शनरी देखें। यह दृश्य डेटाबेस में सभी संबंधपरक तालिकाओं का वर्णन करता है। इसके कॉलम वही हैं जो ALL_TABLES
. में हैं ।
हम इस तालिका को यह देखने के लिए देख सकते हैं कि क्या तालिका मौजूद है, उसके बाद ही DROP TABLE
चलाएं बयान अगर ऐसा होता है।
उदाहरण:
DECLARE
tbl_count number;
sql_stmt long;
BEGIN
SELECT COUNT(*) INTO tbl_count
FROM dba_tables
WHERE owner = 'HR'
AND table_name = 'T1';
IF(tbl_count <> 0)
THEN
sql_stmt:='DROP TABLE T1';
EXECUTE IMMEDIATE sql_stmt;
END IF;
END;
परिणाम:
PL/SQL procedure successfully completed.
इस मामले में, t1
. नामक तालिका पहले से मौजूद था और गिरा दिया गया था।
अब, अगर हम वही कोड दोबारा चलाते हैं, तो हमें वही आउटपुट मिलता है:
PL/SQL procedure successfully completed.
कोई त्रुटि नहीं हुई, भले ही तालिका अब मौजूद नहीं है।
हालाँकि, यदि हम तालिका के अस्तित्व की जाँच किए बिना केवल तालिका को छोड़ने का प्रयास करते हैं, तो हमें एक त्रुटि मिलती है:
DROP TABLE T1;
परिणाम:
Error report - ORA-00942: table or view does not exist 00942. 00000 - "table or view does not exist"
विकल्प 2:त्रुटि के लिए परीक्षण करें
इसे करने का एक और तरीका है कि आप आगे बढ़ें और DROP TABLE
. चलाएं कथन, और उसके बाद होने वाली किसी भी ORA-00942 त्रुटि को पकड़ें। विशेष रूप से, हम किसी भी SQLCODE -942 त्रुटि को पकड़ते हैं जो होती है।
उदाहरण:
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE t1';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN
RAISE;
END IF;
END;
परिणाम:
PL/SQL procedure successfully completed.
मैंने उसे चलाया, भले ही T1
तालिका मौजूद नहीं थी। ORA-00942 त्रुटि पकड़ी गई और नियंत्रित की गई, इसलिए हमें कोई त्रुटि संदेश नहीं मिला।
यदि तालिका पहले से मौजूद होती, तो तालिका हटा दी जाती, और हमें वही आउटपुट दिखाई देता।