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

Oracle SQL स्क्रिप्ट में स्थिति आधारित स्पूल पीढ़ी

यदि आप इस नियंत्रण अनुभाग को अपनी स्क्रिप्ट में रख सकते हैं, उदा। elcm_ctl.sql , आप इसे बना सकते हैं:

accept run_it char format a1 prompt "Run the script?"

set termout off

whenever sqlerror exit success rollback
exec if upper(nvl('&run_it', 'N')) != 'Y' then raise no_data_needed; end if;
whenever sqlerror continue

spool c:\elcm.sql
select 'select sysdate from dual;' from dual;
spool off

set termout on

spool c:\elcm_details.spl
@c:\elcm.sql
spool off

स्वीकार करें आदेश मेरी राय में, प्रतिस्थापन संकेतों पर भरोसा करने से थोड़ा अधिक साफ है, और कुछ हद तक स्वयं-दस्तावेज है। यह उपयोगकर्ता को केवल 'gen' . के बजाय निर्दिष्ट स्ट्रिंग के साथ संकेत देता है . (एसक्यूएल * प्लस में आप इसे बढ़ा सकते हैं और उपयोगकर्ता को एक ही वर्ण में डालने के लिए मजबूर कर सकते हैं, अगर वे कुछ भी लंबे समय तक डालते हैं तो फिर से संकेत देते हैं; और 'एन' के लिए डिफ़ॉल्ट अगर वे कुछ भी दर्ज किए बिना रिटर्न दबाते हैं। लेकिन एसक्यूएल डेवलपर केवल समर्थन करता है कार्यक्षमता का एक सबसेट)।

फिर एक छोटा अनाम ब्लॉक एक अपवाद फेंकता है - वास्तव में कोई फर्क नहीं पड़ता - यदि दर्ज किया गया चर मान 'y' नहीं है या 'वाई' . ऐसा करते समय मैंने सेट किया है टर्मआउट बंद तो आप वास्तविक अपवाद नहीं देखते हैं। और मैंने जब भी sqlerror जब वह अपवाद उठाया जाता है तो स्क्रिप्ट को बाहर निकलने के लिए, इसलिए बाद में जो कुछ भी आता है वह नहीं चलता है। नियंत्रण स्क्रिप्ट में वह सब कुछ है, न केवल अगली क्वेरी, बल्कि यदि आपको अधिक लचीला होने की आवश्यकता है तो आपके पास कई उप-स्क्रिप्ट हो सकती हैं।

लेकिन SQL डेवलपर में, टर्मआउट जब आप @ . के माध्यम से चलते हैं तो केवल अपेक्षित रूप से काम करता है . यदि आप elcm_ctl.sql . की सामग्री चलाते हैं सीधे SQL वर्कशीट से आप देखेंगे कि अपवाद उठाया जा रहा है, जो थोड़ा बदसूरत है। तो इसके बजाय उस नियंत्रण स्क्रिप्ट को सहेजें और एक खाली कार्यपत्रक में बस करें:

@c:\elcm_ctl.sql

उस कार्यपत्रक को एक स्क्रिप्ट के रूप में निष्पादित करें और यह आपको संकेत देगा; अगर आप 'Y' . दर्ज करते हैं आप स्क्रिप्ट आउटपुट विंडो में स्क्रिप्ट का आउटपुट देखेंगे (जब तक कि आप सेट टर्मआउट बंद नहीं छोड़ते हैं) नियंत्रण स्क्रिप्ट में), और यह स्पूल फ़ाइल बनाएगा। अगर आप कुछ और डालते हैं तो यह elcm.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. Oci8 लोड नहीं कर सकता -> घातक त्रुटि:अपरिभाषित फ़ंक्शन पर कॉल करें oci_connect ()

  2. एक ही टेबल में कई कॉलम के लिए इनर जॉइन करना

  3. Oracle त्रुटि:[:में:अज्ञात ऑपरेटर

  4. संदर्भित करने के लिए कोई प्राथमिक कुंजी के साथ विदेशी कुंजी

  5. Oracle डेटाबेस:BLOB कैसे पढ़ा जाए?