Oracle डेटाबेस में IF NOT EXISTS
. शामिल नहीं है इसके CREATE TABLE
. के साथ क्लॉज कथन, जैसे कुछ अन्य DBMS करते हैं।
इसलिए, यदि हम पहले से उपयोग किए जा रहे तालिका नाम के कारण कोई त्रुटि उत्पन्न नहीं करना चाहते हैं, तो हमें तालिका के अस्तित्व की जांच के लिए अन्य विधियों का उपयोग करने की आवश्यकता है।
विकल्प 1:DBA_TABLES
चेक करें देखें
DBA_TABLES
एक डेटा डिक्शनरी व्यू है जो डेटाबेस में सभी रिलेशनल टेबल का वर्णन करता है। इसके कॉलम वही हैं जो ALL_TABLES
. में हैं ।
हम यह देखने के लिए इस तालिका की जांच कर सकते हैं कि क्या तालिका पहले से मौजूद है, उसके बाद ही CREATE 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:='
CREATE TABLE T1 (
c1 number(6,0),
c2 varchar2(10)
)';
EXECUTE IMMEDIATE sql_stmt;
END IF;
END;
परिणाम:
PL/SQL procedure successfully completed.
इस मामले में, तालिका इसलिए बनाई गई क्योंकि किसी मौजूदा तालिका का नाम t1
. नहीं था ।
अब, यदि हम फिर से तालिका बनाने का प्रयास करते हैं, तो हमें वही आउटपुट मिलेगा जो PL/SQL प्रक्रिया सफलतापूर्वक पूरा हुआ, और कोई त्रुटि नहीं होगी।
हालांकि, अगर हम पहले इसकी मौजूदगी की जांच किए बिना टेबल बनाने की कोशिश करते हैं, तो हमें एक त्रुटि मिलती है:
CREATE TABLE T1 (
c1 number(6,0),
c2 varchar2(10)
);
परिणाम:
Error report - ORA-00955: name is already used by an existing object 00955. 00000 - "name is already used by an existing object"
विकल्प 2:त्रुटि के लिए परीक्षण
इसे करने का एक और तरीका है कि आप आगे बढ़ें और CREATE TABLE
चलाएं कथन, और उसके बाद होने वाली किसी भी ORA-00955 त्रुटि को पकड़ें। विशेष रूप से, हम किसी भी SQLCODE -955 त्रुटि को पकड़ते हैं जो होती है।
उदाहरण:
DECLARE
sql_stmt long;
BEGIN
sql_stmt:='
CREATE TABLE T1 (
c1 number(6,0),
c2 varchar2(10)
)';
EXECUTE IMMEDIATE sql_stmt;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -955 THEN
NULL;
ELSE
RAISE;
END IF;
END;
परिणाम:
PL/SQL procedure successfully completed.
मैंने उसे चलाया, भले ही T1
तालिका पहले से मौजूद थी। ORA-00955 त्रुटि पकड़ी गई और उसे संभाला गया, इसलिए हमें कोई त्रुटि संदेश नहीं मिला, और तालिका नहीं बनाई गई।
यदि तालिका पहले से मौजूद नहीं होती, तो तालिका बन जाती, और हमें वही आउटपुट दिखाई देता।