Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

डायनेमिक SQL - सिंटैक्स और शब्दार्थ की जाँच करें

EXPLAIN PLAN लगभग सभी प्रकार के SQL कथनों के सिंटैक्स और शब्दार्थ की जाँच करेगा। और इसके विपरीत DBMS_SQL.PARSE यह परोक्ष रूप से कुछ भी निष्पादित नहीं करेगा।

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

उदाहरण के लिए, नीचे दिए गए PL/SQL ब्लॉक SELECT . की वैधता की जांच करते हैं स्टेटमेंट और एक CREATE TABLE बयान। वे बिना किसी त्रुटि के चलते हैं इसलिए वाक्य रचना ठीक है।

begin
    execute immediate 'explain plan for select * from dual';
end;
/

begin
    execute immediate 'explain plan for create table just_some_table(a number)';
end;
/

खराब कथन चलाने से त्रुटि उत्पन्न होगी। कम से कम इस एक परीक्षण मामले में, यह वही त्रुटि उत्पन्न करता है जैसे कि कथन स्वयं ही चलाया गया था।

begin
    execute immediate 'explain plan for select * from this_table_does_not_exist';
end;
/
ORA-00942: table or view does not exist
ORA-06512: at line 2

मैनुअल में सिंटैक्स आरेख का तात्पर्य है कि इसे सभी . के लिए चलाना चाहिए बयान। हालांकि, ऐसा प्रतीत होता है कि कम से कम कुछ कथन प्रकार हैं जो काम नहीं करते हैं, जैसे ALTER SESSION .

begin
    execute immediate 'explain plan for alter session set optimizer_features_enable = ''11.2.0.4''';
end;
/
ORA-00900: invalid SQL statement
ORA-06512: at line 2

थोड़ा सा विषय-वस्तु - क्या आप पीएल/एसक्यूएल में निर्मित एक निजी एसक्यूएल फिडल की तरह एक पूरी तरह से सामान्य एसक्यूएल इंटरफेस बनाने की कोशिश कर रहे हैं? क्या आपको उन चीजों के बारे में चिंता करने की ज़रूरत है जैसे उपयोगकर्ताओं को कुछ कथन प्रकारों को चलाने का प्रयास करने से रोकना, और यह सुनिश्चित करना कि कोई पिछला अर्धविराम नहीं है? यदि ऐसा है तो मैं उन कठिन गतिशील SQL कार्यों में से कुछ में सहायता के लिए प्रश्न को संपादित कर सकता हूं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक डेटाबेस (कनेक्शन) मौजूद है या नहीं, यह जांचने के लिए चींटी कार्य?

  2. Oracle संग्रहीत कार्यविधियाँ, SYS_REFCURSOR और NHibernate

  3. क्लॉज के साथ स्टेटमेंट अपडेट करें

  4. मैं Oracle पर SQL का उपयोग करके चालू वर्ष कैसे प्राप्त करूं?

  5. गिनती अधिकतम स्थिति के साथ चयन के रूप में Oracle तालिका बनाएं